如何与最新的 EF Core 每晚构建建立多对多关系?
How to create a many to many relationship with latest nightly builds of EF Core?
如何使用 Fluent API 在 EF7 EF Core 中的两个表之间创建多对多关系?例如,假设您有以下表格:
如何利用 DbContext class 中的模型构建器来定义这样的关系?
我从 EF 团队关于这个主题的会议记录中看到 this link,但那是去年的,我想知道 this link 中是否有关于如何处理这个问题的新信息=22=]EF7 EF 核心。
我能够在 Photos 和 PhotosPeople 以及 People 和 PhotosPeople 之间创建一对多关系。数据库是按照我希望的方式生成的,但是现在 People 和 Photos 之间的导航需要与中间实体进行交互。我想避免这种情况。
这是由 #1368 跟踪的。解决方法是将连接 table 映射到一个实体:
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);
如何使用 Fluent API 在 EF7 EF Core 中的两个表之间创建多对多关系?例如,假设您有以下表格:
如何利用 DbContext class 中的模型构建器来定义这样的关系?
我从 EF 团队关于这个主题的会议记录中看到 this link,但那是去年的,我想知道 this link 中是否有关于如何处理这个问题的新信息=22=]EF7 EF 核心。
我能够在 Photos 和 PhotosPeople 以及 People 和 PhotosPeople 之间创建一对多关系。数据库是按照我希望的方式生成的,但是现在 People 和 Photos 之间的导航需要与中间实体进行交互。我想避免这种情况。
这是由 #1368 跟踪的。解决方法是将连接 table 映射到一个实体:
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);