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

entity-framework-core

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

照片到人数据库图

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

我已经看到了EF团队关于这个主题的会议记录中的这个链接,但它是从去年开始,我想知道是否有关于如何在EF7 EF Core中处理此问题的新信息。

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

一般承认的答案

这由#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);


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因