单表继承中IsDiscriminator的EntityFramework问题
本文关键字:EntityFramework 问题 IsDiscriminator 继承 单表 | 更新日期: 2023-09-27 18:00:53
我有两个简单的类:
public abstract class Device
{
public int DeviceID { get; set; }
public string SerialNumber { get; set; }
[Column(IsDiscriminator = true)]
public int DeviceTypeID { get; set; }
}
public class SomeDevice : Device
{
public string SomeAdditionalInfo { get; set; }
}
所有内容都存储在一个表中:
DeviceID|SerialNumber|DeviceTypeID|SomeAdditionalInfo
但在应用程序中,我在检索数据时遇到了下一个异常:
Invalid column name 'Discriminator'.
如果我将列DeviceTypeID更改为Discriminator,则一切正常。为什么属性IsDiscriminator=true被忽略?
您使用的Column
属性来自错误的命名空间-它是Linq到Sql的属性。实体框架中的鉴别器从未映射为属性-EF将自动创建该列。所以,除非您正在使用现有的数据库,否则您应该简单地使用:
public abstract class Device
{
public int DeviceID { get; set; }
public string SerialNumber { get; set; }
}
在现有数据库的情况下,您必须使用流利的API。在派生上下文中,将其添加到OnModelCreating
:
modelBuilder.Entity<Device>()
.Map<SomeDevice>(m => m.Requires("DeviceTypeID")
.HasValue(10));