实体框架 5 枚举命名

本文关键字:枚举 框架 实体 | 更新日期: 2023-09-27 18:30:57

我首先将EF 5与迁移和代码一起使用。 这一切都很好,但我想解决一些问题/疑问。

让我们从一个简单的例子开始。 假设我有一个用户表和一个用户类型表。 用户类型表是我的应用程序中的枚举/查找表。 因此,用户表有一个UserTypeId列和一个外键ref等UserType。 在我的 poco 中,我有一个名为 UserType 的属性,它具有枚举类型。

将初始值添加到 UserType 表(或稍后添加/更改值)并在初始迁移器中创建表等。我需要一个UserType表poco来表示数据库中的实际表并在映射文件中使用。 我将 User poco 中的 UserType 属性映射到 UserType poco 中的 UserTypeId。 所以现在我有一个用于代码优先/迁移/上下文映射等的 poco,我有一个枚举。 两者不能使用相同的名称,所以我有一个名为 UserType 的 poco 和枚举的其他东西,还是让 UserType 的 poco 是 UserTypeTable 或其他东西?

然而,更重要的是,我是否缺少代码最初如何工作的一些关键元素? 我尝试了上面的示例,运行了添加迁移,它没有为枚举添加查找表。

实体框架 5 枚举命名

如果我正确理解了你的问题和你对什么感到困惑,

Enums support has nothing to do with lookup tables on the Db side.  

枚举只是允许您在类中具有 Enum-s 的属性,并且基本上被转换为 'int'-s - 所以那里没有其他东西。

有关更多信息,您可能想观看Julie Lerman关于Enum-s支持的视频

希望这有帮助

根据我的经验,枚举对你的代码比查找类更重要,所以给它一个正确的名称。我还会将查找类隔离,与模型中的用户没有任何关系。如果它真的只是为了查找,那么你不需要它挂在你的用户身上。带有 DescriptionAttribute 的枚举可以在代码中完成查找。

UserTypeLookup可能是一个好名字,因为这听起来像是您将使用它的目的。然后,可以使用该类来维护表。

假设您没有先在 ef code 中映射UserTypeLookupUser之间的关系,则唯一需要在数据库中手动创建的是 User 表中的UserType列与UserTypeLookup表中的 PK 之间的外键关系。 UserTypeLookup仍然可以是一个实体,即使你没有为其设置任何关系,EF 仍应为其生成数据库表。