1

我有一个新闻实体,我根据他们的 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>();
    }

和相同的 group :

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

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

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

在此处输入图像描述

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

4

1 回答 1

11

您不应单独定义 GroupNews。意思是,你不应该GroupNews在你的项目中定义一个类。您必须使用独立关联(类中的列表和您的类中News的列表)进行 CRUD 操作。这是您的课程的外观: GroupGroupNews

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)or myNews.Groups.Add(myGroup)。实体框架将自动处理插入。virtual请注意,如果要为关联启用延迟加载,则应使用关键字。

于 2013-05-14T14:25:23.420 回答