gpt4 book ai didi

c# - Entity Framework : many to many relationship , 插入和更新

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:23 27 4
gpt4 key购买 nike

我有一个新闻实体,我根据他们的 NewsID 获取新闻。然后我定义了一个新实体,一个组,我想根据他们的组 ID 获取新闻。我尝试使用 this article 处理这种(多对多)关系通过使用代码优先方法。

enter image description here

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

 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>();
}

在我的新闻 Controller 中,我添加:

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

enter image description here

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

最佳答案

您不应该单独定义 GroupNews。也就是说,您不应在项目中定义 GroupNews 类。您必须使用独立关联(Group 类中的 News 列表和 News< 中的 Group 列表来执行 CRUD 操作类)。您的类(class)应该如下所示:

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)。 Entity Framework 将自动处理插入。请注意,如果要为关联启用延迟加载,则应使用 virtual 关键字。

关于c# - Entity Framework : many to many relationship , 插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com