我正在使用EF进行我正在处理的CMS类型应用程序。我遇到过这个问题,我需要一个M2M(多对多)关系,我希望自己创建第三个表。 (老实说,我自己创建所有表格,个人喜好)。
我一直在搜索Google,似乎手动创建第3个表是不可能的,而EF也是这样做的,无论如何都有吗?
例如,这是一个测试类。
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&key=[KEY FROM GOOGLE API CONSOLE]&id=[CHANNEL ID]
从上面的课程中,您可以看到一个横幅可以在很多页面中,一个页面可以有很多横幅。使用存储关系的第3列BannerInPages以及另外两列来指定页面上横幅的排序和放置。
如何使用EF fluent API链接此数据?这可能吗?
亲切的问候
阿西。
答案 0 :(得分:2)
要实现您的目标,您需要在这两个实体和BannersInPages
实体之间创建两个一对多的关系。为此,您需要将集合导航属性的类型更改为BannersInPages
:
public class Banner
{
//other columns..
public IList<BannersInPages> Pages{get;set;}
}
public class Page
{
//other columns..
public IList<BannersInPages> Banners{get;set;}
}
public class BannersInPages
{
public int BannerId{get;set;}
public int PageId{get;set;}
public int BannerSortOrder{get;set;}
public string Placement {get;set;}
// add these navigation properties too if you want (recommended)
public virtual Banner{get;set;}
public virtual Page{get;set}
}
Fluent Api配置(覆盖上下文中的OnModelCreating
方法)将是:
modelBuilder.Entity<BannersInPages>().HasKey(a => new { a.BannerId, a.PageId});
modelBuilder.Entity<BannersInPages>()
.HasRequired(bp=>bp.Banner)
.HasMany(b=>b.Banners)
.HasForeignKey(bp=>bp.BannerId);
modelBuilder.Entity<BannersInPages>()
.HasRequired(bp=>bp.Page)
.HasMany(b=>b.Pages)
.HasForeignKey(bp=>bp.PageId);