26

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

照片到人物数据库图

如何利用 DbContext 类中的模型构建器来定义这样的关系?

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

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

4

1 回答 1

49

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

要导航,请使用 Select:

// person.Photos
var photos = person.PersonPhotos.Select(c => c.Photo);
于 2015-04-06T15:13:50.757 回答