如何在 EF Core 中的表 A 中包含表 B 的多列

问题描述 投票:0回答:1

我尝试在包含另一个表的两列或更多列的表上没有成功。

我想要这样,但是自动配置失败,需要在

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
}

基本上,我有一个项目集合,我想对它们有不同类型的布局。

sqlite entity-framework-core
1个回答
0
投票

您可以删除该属性

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.