【问题标题】:Code First EF: Enum Id not being added to database during database generationCode First EF:在数据库生成期间未将枚举 ID 添加到数据库
【发布时间】:2014-02-19 09:43:46
【问题描述】:

我刚刚更改了我的数据模型,当数据库第一次由 EF 生成时,我希望在数据表中有一些默认项。以前,我是通过种子方法做到的。但是现在我发现如果我使用枚举(使用默认值),它会更有用,我必须编写的代码量会更少。

这是我添加enum后的当前模型

public partial class License
{     
    public int LicenseId { get; set; }
    public LicenseTypes Licensetype { get; set; }
}

public enum LicenseTypes
{
    Trial = 0,
    Paid = 1
}

这是我的DbContext 课程

public partial class InfoBridgeSmartDatePickerDbContext : IdentityDbContext
{
    public InfoBridgeSmartDatePickerDbContext():base("DefaultConnection")
    {
    }

    public DbSet<License> Licenses { get; set; }

}

当我运行应用程序时,会生成数据库,但表 Licenses 不包含 enumvaluesId。它不应该持有枚举的valuesId 吗?

我使用的EF版本是:6.0.2

【问题讨论】:

  • License中确实应该有一个Licensetype int not null列;我认为您发布的代码没有问题
  • 但是表格是否也会生成两行,Id 为 0,1,LicenseType 为 Trial 和 Paid,还是必须在种子方法期间将其添加到表格中?
  • 目前我不知道表中会出现什么,只是表中包含空列(LicenseId 和 LicenseType)或包含一些值的列
  • 可能我脑子里对这件事的工作原理有完全不同的看法。
  • 不,您的代码中的 License 是一个实体,并且需要一个 LicenseTypes 值作为其字段之一,并带有一个单独的 LicenseId 字段。您可以使用 LicenseTypes 作为实体的 PK,但您仍然需要为每个枚举值手动添加实体的实例

标签: c# asp.net-mvc entity-framework ef-code-first


【解决方案1】:

不,数据库中不会有枚举值。 EF 只管理从基元到枚举的转换,在数据库级别没有约束。

【讨论】:

  • 我是这个枚举和代码的新手,所以可以说如果我必须将 LicenseId 分配给用户,那么我该怎么做,因为我在数据库中的数据表不知道什么是许可证那里
  • 但是对我来说它连Id都没有,完全是空白的,我觉得至少应该有Id值
  • @Biplov13 你应该用你需要的数据填写表格,EF 不能为你做。
【解决方案2】:

尝试使用

public partial class License
{     
    public int LicenseId { get; set; }
    [NotMapped]
    public LicenseTypes Licensetype { get; set;{ _default = value; } }
}

我使用的是单个值,用于您检查一次希望的对象..它可以解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多