如何使用Fluent API在 EF7 EF Core中的两个表之间创建多对多的关系?例如,假设您有以下表格:
如何利用DbContext类中的modelBuilder来定义这样的关系?
我看过EF团队关于这个主题的会议记录的this链接,但它是从去年开始的,我想知道是否有关于如何在 EF7 EF Core。
我能够在Photos和PhotosPeople以及People和PhotosPeople之间创建一对多的关系。数据库是按照我的喜好生成的,但人和照片之间的导航现在需要与中间实体进行交互。我想避免这种情况。
答案 0 :(得分:46)
由#1368跟踪。解决方法是将连接表映射到实体:
class Photo
{
public int Id { get; set; }
public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}
class PersonPhoto
{
public int PhotoId { get; set; }
public Photo Photo { get; set; }
public int PersonId { get; set; }
public Person Person { get; set; }
}
class Person
{
public int Id { get; set; }
public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}
请务必使用复合键配置PersonPhoto
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PersonPhoto>().HasKey(x => new { x.PhotoId, x.PersonId });
}
要导航,请使用选择:
// person.Photos
var photos = person.PersonPhotos.Select(c => c.Photo);