我尝试在包含另一个表的两列或更多列的表上没有成功。
我想要这样,但是自动配置失败,需要在
OnModelCreating
中手动配置,但我不知道该怎么做。
public class Collection
{
public int Id { get; set; }
public Layout? PrimaryLayout { get; set; }
public Layout? SecondaryLayout { get; set; }
}
public class Layout
{
public int Id { get; set; }
public List<Collection> Collections { get; set; } = new(); // if possible, but not necessary
}
基本上,我有一个项目集合,我想对它们有不同类型的布局。
您可以删除该属性
public List<Collection> Collections { get; set; } = new();
所以,你的实体看起来像这样
public class Collection
{
public int Id { get; set; }
public Layout? PrimaryLayout { get; set; }
public Layout? SecondaryLayout { get; set; }
}
public class Layout
{
public int Id { get; set; }
}
如果您对这些实体没问题,则无需手动编写配置。
不幸的是,您不能为多个外键使用单个导航集合,因此如果可以接受,您可以使用多个导航集合
public class Collection
{
public int Id { get; set; }
public Layout? PrimaryLayout { get; set; }
public Layout? SecondaryLayout { get; set; }
}
public class Layout
{
public int Id { get; set; }
public List<Collection> PrimaryCollections { get; set; } = new();
public List<Collection> SecondaryCollections { get; set; } = new();
}
您还需要在 DbContext 中覆盖
OnModelCreating(ModelBuilder modelBuilder)
public class YourDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Collection>()
.HasOne(x => x.PrimaryLayout)
.WithMany(x => x.PrimaryCollections);
modelBuilder.Entity<Collection>()
.HasOne(x => x.SecondaryLayout)
.WithMany(x => x.SecondaryCollections);
}
}