繁体   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