我正在使用 Entity Framework 5 和代码优先方法。
我有一Product
门课,可以有零个或多个ProductColors
。使用播种将颜色预填充到数据库中。颜色表不应使用 EF 填充新项目,因为它是不会增长的项目的静态列表。颜色在许多产品中重复使用。
我的模型类:
public class Product
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<ProductColor> Colors { get; set; }
}
public class ProductColor
{
public int ID { get; set; }
public string Title { get; set; }
}
在我的DbMigrationsConfiguration
:
protected override void Seed(... context)
{
context.ProductColors.AddOrUpdate(
p => p.ID,
new ProductColor(1, "White"),
new ProductColor(2, "Black"),
new ProductColor(3, "Red"));
}
在我的DbContext
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasMany(x => x.Colors).WithMany();
}
public DbSet<Product> Products { get; set; }
MyProducts
是从 viewmodel 对象创建的,无论是在第一次创建时,还是在后期编辑时:
Product product = new Product { ID = productViewModel.ID };
product.Colors = new List<ProductColor>();
foreach (int colorId in productViewModel.SelectedColorIds)
{
ProductColor productColor = productColors.Find(m => m.ID == colorId);
product.Colors.Add(productColor);
}
它们在创建时像这样保存在数据库中:
db.Products.Add(product);
db.SaveChanges();
当它们被编辑时,就像这样:
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
EF 生成Products
,ProductColor
和ProductProductColor
表最初就好了。首次创建和保存产品时,颜色已正确保存在ProductProductColor
表中。
但是当我编辑/修改Product
andColors
集合时,数据库中的颜色没有更新。似乎它无法识别颜色集合已被修改。我怎样才能做到这一点?
很抱歉这篇冗长的文章,但我想包括所有元素,以防有人需要完整的图片。