[英]Update with Many to Many relationship Entity Framework
我有一個實體對象Item
:
public partial class Item : Entity
{
public int ItemId { get; set; }
....
public virtual IList<ItemStandard> Standards { get; set; }
}
而且我有ItemStandard
, Itemstandard
可以屬於許多Item
, Item
可以有許多ItemStandard
。
public partial class ItemStandard : Entity
{
public int ItemStandardId { get; set; }
....
public virtual IList<Item> Items { get; set; }
public ItemStandardGroup ItemStandardGroup { get; set; }
}
我忽略了這些對象的無關緊要的部分。 這是我的映射:
public class ItemMapping : EntityTypeConfiguration<Item>
{
public ItemMapping()
{
HasMany(t => t.Standards)
.WithMany(t => t.Items)
.Map(m =>
{
m.ToTable("ItemStandardRelationShip");
m.MapLeftKey("ItemId");
m.MapRightKey("ItemStandardId");
});
}
}
當我確實可以從上下文中檢索對象時-如果我可以
context.Item.FirstOrDefault(x => x.ItemId == whatever);
它會像ItemStandard
的那樣返回屬性標准中的所有ItemStandard
。
現在,我嘗試進行如下更新:
public Item SaveItem(Item item, int[] Standards)
{
foreach (var a in Standards)
{
var newStandard = _context.ItemStandard.FirstOrDefault(x => x.ItemStandardId == a);
item.Standards.Add(newStandard);
}
_context.Item.Attach(item);
_context.Entry(item).State = EntityState.Modified;
_context.SaveChanges();
return _context.Item.FirstOrDefault(x => x.ItemId == item.ItemId);
}
您可以看到我實際上是如何從數據庫中調用另一個SELECT
來確保保存發生的,而不是返回我保存的對象。 當我在調試器中停止此操作時,我看到一切正常。 New ItemStandard
附加到Item上,如果我進入每個ItemStandard
,則現在有新Item
的新Item
屬性。
但是,當我之后進入數據庫時,我的ItemStandardRelationShip表中沒有任何更改。 好像什么也沒發生。 上下文設置就很好了,每個存儲庫中的其他所有內容都可以正常工作。 有人知道我在做什么錯嗎?
我想,事實證明,我閱讀的所有教程都是錯誤的。 您必須實際設置兩個受影響的對象的更改
foreach (var a in Standards)
{
var newStandard = _context.ItemStandard.FirstOrDefault(x => x.ItemStandardId == a);
newStandard.Items.Add(item);
item.Standards.Add(newStandard);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.