Entity Framework Core 2.0 的多个子实体中的属性名称相同

2 c# entity-framework entity-framework-core .net-core-2.0

我目前正在使用下面的简单模型。这非常简单:我们有资源,它们可以是Room, EmptyOffice(...) 或Service

Room并且EmptyOffice可以有容量,但不能Service

public abstract class Resource : Entity
{
    public string Name { get; set; }
}

public class Room : Resource
{
    public int Capacity { get; set; }
}

public class EmptyOffice : Resource
{
    public int Capacity { get; set; }
}

public class Service : Resource
{ }
Run Code Online (Sandbox Code Playgroud)

为了从 SQL 视图获取数据,我使用映射:

builder.Entity<Resource>(m =>
{
    m.ToTable("resource", "facility");
    m.HasKey(x => x.Id);
    m.Property(x => x.Id)
        .HasColumnName("ResourceId");
    m.Property(x => x.Type)
        .HasColumnName("ResourceTypeId");

    m.HasDiscriminator(x => x.Type)
        .HasValue<Room>(ResourceType.Room)
        .HasValue<EmptyOffice>(ResourceType.EmptyOffice)
        .HasValue<Service>(ResourceType.Service);
});

builder.Entity<Room>();
builder.Entity<EmptyOffice>();
builder.Entity<Service>();
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,EF Core 抛出以下异常:

System.Data.SqlClient.SqlException:“列名‘Room_Capacity’无效。”

如果我将Capacity属性重命名为Room_Capacity,它可以工作,但很糟糕。

如何强制 EF Core 2.0 针对每个子实体的容量属性?

谢谢塞巴斯蒂安

小智 5

这对我有用:

builder.Entity<Room>().Property(a => a.Capacity).HasColumnName("Capacity");

builder.Entity<EmptyRoom>().Property(a => a.Capacity).HasColumnName("Capacity");
Run Code Online (Sandbox Code Playgroud)