Javascript Breeze.js/NET+EF复杂的对象行为相当奇怪

Javascript Breeze.js/NET+EF复杂的对象行为相当奇怪,javascript,breeze,Javascript,Breeze,我正在开发一个自定义数据访问层,以便在breeze.js中使用 我所拥有的: 模型: 公共类产品 { [关键] public int ProductId{get;set;} 公共字符串Upc{get;set;} 公共字符串名称{get;set;} 公共十进制MsrpPrice{get;set;} 公共整数数量{get;set;} public virtual ICollection<ProductFeature> Features { get; set; } publ

我正在开发一个自定义数据访问层,以便在breeze.js中使用 我所拥有的: 模型: 公共类产品 { [关键] public int ProductId{get;set;} 公共字符串Upc{get;set;} 公共字符串名称{get;set;} 公共十进制MsrpPrice{get;set;} 公共整数数量{get;set;}

    public virtual ICollection<ProductFeature> Features { get; set; }
    public virtual B2BCategory InB2BCategory { get; set; }
    public virtual ICollection<ImageDescriptor> Images { get; set; }

    public int CategoryId {get; set;}
上下文提供程序: 公共类ProductContextProvider:ContextProvider { 私有只读ProductRepository repo=新ProductRepository

    public IQueryable<B2BCategory> Categories
    {
        get { return repo.Categories.AsQueryable(); }
    }

    public IQueryable<Product> Products
    {
        get
        {
            return repo.Products.OrderBy(p => p.ProductId).AsQueryable();
        }
    }

    protected override string BuildJsonMetadata()
    {
        var contextProvider = new EFContextProvider<ProductMetadataContext>();
        return contextProvider.Metadata();
    }

    protected override void SaveChangesCore(SaveWorkState saveWorkState)
    {…
    }

    // No DbConnections needed
    public override IDbConnection GetDbConnection()
    {
        return null;
    }

    protected override void OpenDbConnection()
    {
        // do nothing
    }

    protected override void CloseDbConnection()
    {
        // do nothing 
    }
}

internal class ProductMetadataContext : DbContext
{
    static ProductMetadataContext()
    {
        Database.SetInitializer<ProductMetadataContext>(null);
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ProductFeatureConfiguration());
        modelBuilder.Configurations.Add(new ImageDescriptorConfiguration());
    }

    public DbSet<Product> Products { get; set; }
    public DbSet<B2BCategory> Categories { get; set; }
}

internal class ImageDescriptorConfiguration : EntityTypeConfiguration<ImageDescriptor>
{
    public ImageDescriptorConfiguration()
    {
    // I tried to mess up with key orders
        HasKey(i => new { i.Uri, i.ProductId});
    }
}

internal class ProductFeatureConfiguration : EntityTypeConfiguration<ProductFeature>
{
    public ProductFeatureConfiguration()
    {
        HasKey(f => new { f.ProductId, f.Name });
    }
}
我直接填充产品的功能和图像属性:

 product.Features = new Collection<ProductFeature>();
 product.Images = new Collection<ImageDescriptor>();
 …
 var imgd = new ImageDescriptor
 {
     ProductId = product.ProductId, 
     Updated = DateTime.Now, 
     Uri = defsmall, 
     IsDefault = !product.Images.Any()
 }
 product.Images.Add(imgd);
 …
 var pf = new ProductFeature
 {
    ProductId = product.ProductId,
    GroupName = "Size",
    Name = size,
    Value = size == "Small" ? new decimal(.75):size == "Medium" ? new decimal(1.3):new decimal(1.8),
    Operation = "*"
  };
  product.Features.Add(pf);
例如,每个产品项目总共有3个产品功能和2个图像

在客户端,我查询如下: 从“产品”返回entityQuery.usingEntityManager.execute

还有…我有一件很奇怪的事: images属性包含一个空数组,features属性包含一个由5!!!个元素组成的数组–3个为ProductFeature类型,2个为ImageDescriptor类型。
我认为这是一个bug–请您帮帮我好吗?

我没有看到任何创建breeze EntityManager并添加或附加新创建的实体然后保存它们的代码。请查看BreezeJs网站可下载zip中的breeze示例

 product.Features = new Collection<ProductFeature>();
 product.Images = new Collection<ImageDescriptor>();
 …
 var imgd = new ImageDescriptor
 {
     ProductId = product.ProductId, 
     Updated = DateTime.Now, 
     Uri = defsmall, 
     IsDefault = !product.Images.Any()
 }
 product.Images.Add(imgd);
 …
 var pf = new ProductFeature
 {
    ProductId = product.ProductId,
    GroupName = "Size",
    Name = size,
    Value = size == "Small" ? new decimal(.75):size == "Medium" ? new decimal(1.3):new decimal(1.8),
    Operation = "*"
  };
  product.Features.Add(pf);