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)
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |