我正在使用實體框架5和代碼優先方法。與EF代碼第一和靜態表的多對多關係
我有一個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; }
我Products
從視圖模型對象的創建,都當他們是這是第一次創建,也是以後的創建被編輯:
db.Products.Add(product);
db.SaveChanges();
而且像這樣,當他們被編輯:
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
EF產生Products
,ProductColor
和ProductProductColor
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);
}
創建時,它們被保存在這樣的數據庫表格最初沒有問題。產品首次創建並保存時,顏色正確保存在ProductProductColor
表中。
但是當我編輯/修改Product
和Colors
集合時,數據庫中的顏色沒有更新。似乎它不承認Colors集合已被修改。我怎麼能這樣做?
對不起,這篇冗長的文章,但我想包括所有的元素,以防萬一有人需要完整的畫面。