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