如何与最新的EF Core夜间版本建立多对多的关系?

时间:2015-04-04 03:46:54

标签: entity-framework-core

如何使用Fluent API在 EF7 EF Core中的两个表之间创建多对多的关系?例如,假设您有以下表格:

Photos to People database diagram

如何利用DbContext类中的modelBuilder来定义这样的关系?

我看过EF团队关于这个主题的会议记录的this链接,但它是从去年开始的,我想知道是否有关于如何在 EF7 EF Core。

我能够在Photos和PhotosPeople以及People和PhotosPeople之间创建一对多的关系。数据库是按照我的喜好生成的,但人和照片之间的导航现在需要与中间实体进行交互。我想避免这种情况。

1 个答案:

答案 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);