【问题标题】:EF6 enum error in derived class派生类中的 EF6 枚举错误
【发布时间】:2017-07-25 02:58:11
【问题描述】:

我有一个基类Company 和两个派生类RetailerSupplier。 我必须向 Retailer 类添加一个枚举,但现在当我尝试创建一个新的 Supplier 时,我收到以下 SQL 错误:

无法将值 NULL 插入“OperatingStatus”列、“Company”表;列不允许空值。插入失败。声明已终止。

如果有帮助,这里是类和枚举:

public abstract class Company
{
    ...
}

public class Retailer : Company
{
    public OperatingStatus OperatingStatus { get; set; }
    ...
}

public class Supplier : Company
{
    ...
}

public enum OperatingStatus
{
    Unknown = 0,
    Active = 1,
    Inactive = -1
}

有没有办法在不将枚举移动到基类的情况下完成这项工作?我所需要的只是使其默认为0

【问题讨论】:

  • 如果这看起来是 TPH,Company 表中的OperatingStatus应该允许NULL,你是如何创建它的?
  • Company 没有此属性。
  • 根据错误消息,它确实 - Company table,而不是类。您不需要在类中使用可为空的类型,EF 迁移会在数据库 table 中创建可为空的 column,这就是为什么我要询问表/列是否为由 EF 创建或由您手动创建。
  • 我试图使用数据注释/流利的 api 来解决它,但我没有成功,所以我创建了一个新的迁移以允许空值并解决了问题。谢谢。

标签: c# entity-framework-6


【解决方案1】:

传统上,有两种方法可以在数据库中实现“继承”。EF 确实支持这两种方法。 您似乎已选择将所有类放在一个大表中(每个层次结构的表)。 在这种情况下,您需要将该字段设为 Nullable(可以为 null),以便数据不会抱怨。您仍然可以在业务对象级别而不是数据库级别验证该字段。

另一种方法(每个具体类的表)是为供应商中的新属性制作单独的表,为零售商中的地区属性制作另一个表。 这将是继承的第二种解决方案。

http://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx

【讨论】:

  • 是的,我使用 TPH 继承。使它可以为空的最佳方法是什么?只需将其设置为可空 public OperatingStatus? OperatingStatus 似乎没有任何作用,因为当我尝试添加迁移时,它是空的。
  • 值得注意的是,我宁愿在类中不让它为空,因为它在进行查询时会导致各种问题。更好的解决方案是默认为0,但我不知道如何做到这一点。
  • 请看一下:Entity Framework 6 Code first 默认值:stackoverflow.com/questions/19554050/…
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 2021-07-28
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2016-11-28
相关资源
最近更新 更多