簡體   English   中英

與多對多關系更新實體框架

[英]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; }

}

而且我有ItemStandardItemstandard可以屬於許多ItemItem可以有許多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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM