实体框架:多对多关系,插入和更新

Aid*_*a E 1 c# entity-framework

我有一个新闻实体,我根据他们的新闻ID获取新闻.然后我定义了一个新实体,一个组,我想根据他们的组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");
        });
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用这种方法基于他们的GroupID获取新闻.但问题在于插入新的新闻和更新.为此,我需要在GroupNews表中保存NewsID和GroupId.这样做.在我定义的新闻模型中:

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

    public News()
    {
        RelatedGroups = new List<Group>();
    }
Run Code Online (Sandbox Code Playgroud)

和小组相同:

    public virtual ICollection<News> RelatedNews { get; set; }
    public Group()
    {
        RelatedNews = new List<News>();
     }
Run Code Online (Sandbox Code Playgroud)

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

            Group group = new Group();
            group.RelatedNews.Add(news);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但没有更新任何内容,并且NewsID没有添加到我的GroupNews表中.

Kam*_*yar 10

您不应单独定义GroupNews.这意味着,您不应该GroupNews在项目中定义类.你所要做的使用独立协会(名单CRUD操作NewsGroup类的列表和Group你的News类).这是你的类应该是什么样子:

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用myGroup.News.Add(myNewsItem)myNews.Groups.Add(myGroup).实体框架将自动处理插入.请注意,virtual如果要为关联启用延迟加载,则应使用关键字.

  • 好吧,你的架构看起来很臭IMO.这是ADO.Net团队推荐的方法,您可以在他们的教程中看到.它有一个好处,让你以OOP方式看你的模型.我们有200多个表和复杂关系(包括各种多对多)的解决方案,并且在架构方面没有任何问题. (2认同)