簡體   English   中英

實體框架:多對多關系,插入和更新

[英]Entity Framework : many to many relationship , Insert and update

我有一個新聞實體,並且根據他們的NewsID獲得新聞。 然后我定義了一個新實體,一個Group,我想根據他們的Group ID獲取新聞。 我試圖解決這個(多對多)使用關系, 本文通過使用代碼第一種方法。

在此處輸入圖片說明

所以在我的上下文中,我添加了:

 public class Groupnews : DbContext
    {

        public DbSet<Group> Group { get; set; }
        public DbSet<News> News { get; set; }

        public Groupnews()
            : base("MyDb")
        {
        }

        public int NewsID { get; set; }
    }

this.HasMany(t => t.News)
    .WithMany(t => t.Groups)
    .Map(m =>
        {
            m.ToTable("GroupNews");
            m.MapLeftKey("GroupID");
            m.MapRightKey("NewsID");
        });

現在,我可以使用此方法基於他們的GroupID獲取新聞。 但是問題在於插入新的新聞和更新。為此,我需要將NewsID和GroupId保存在GroupNews表中。 為此。 在我定義的新聞模型中:

    public virtual ICollection<Group> RelatedGroups { get; set; }

    public News()
    {
        RelatedGroups = new List<Group>();
    }

和組相同:

    public virtual ICollection<News> RelatedNews { get; set; }
    public Group()
    {
        RelatedNews = new List<News>();
     }

在我的新聞控制器中,添加:

            Group group = new Group();
            group.RelatedNews.Add(news);

在此處輸入圖片說明

但沒有任何更新,並且NewsID沒有添加到我的GroupNews表中。

您不應單獨定義GroupNews。 意思是,您不應在項目中定義GroupNews類。 你所要做的使用獨立協會(名單CRUD操作NewsGroup類的列表和GroupNews類)。 這是您的班級樣子:

public class Group
{
    ...
    public Group()
    {
         this.News = new List<News>();
    }

    public virtual ICollection<News> News {get;set;}
}

public class News
{
    ...
    public News()
    {
         this.Group = new List<Group>();
    }
    public virtual ICollection<Group> Groups {get;set;}
}

public class MyContext : DbContext
{
    public DbSet<Group> Groups { get; set; }
    public DbSet<News> News { get; set; }
}

然后,您可以使用myGroup.News.Add(myNewsItem)myNews.Groups.Add(myGroup) 實體框架將自動處理插入。 請注意,如果要為關聯啟用延遲加載,則應使用virtual關鍵字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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