【问题标题】:Map Table Column to Enum and Lookup Table to Enum将表列映射到枚举和查找表到枚举
【发布时间】:2013-10-22 23:12:17
【问题描述】:

我使用的是Entity Framework 6,刚刚发布,需要:

1 - 将表列映射到枚举;

2 - 将查找表(有两列:Id 和 Name)映射到 Enum。

这在 Entity Framework 6 中可行吗?

谢谢你, 米格尔

【问题讨论】:

标签: entity-framework


【解决方案1】:

您通常不会将表映射到枚举类型。您只需根据查找表中的内容定义枚举类型并使用它,而不将这些表包含在模型中。例如 Northwind.Categories 表:

ID  Name            Description
1   Beverages       Soft drinks, coffees, teas, beers, and ales
2   Condiments      Sweet and savory sauces, relishes, spreads, and seasonings
3   Confections     Desserts, candies, and sweet breads
4   Dairy Products  Cheeses
5   Grains/Cereals  Breads, crackers, pasta, and cereal
6   Meat/Poultry    Prepared meats
7   Produce         Dried fruit and bean curd
8   Seafood         Seaweed and fish

您将创建以下枚举类型

public enum Categories
{
    Beverages = 1,
    Condiments = 2,
    Confections = 3,
    Dairy_Products = 4,
    Grains_Cereals = 5,
    Meat_Poultry = 6,
    Produce = 7,
    Seafood = 8,
}

确保枚举值与数据库中的值相对应)并且您将在您的应用程序中使用它而不包括类别表 - 即您将使用此枚举类型作为作为数据库中类别表的外键的属性。或者 - 例如如果您需要描述 - 您将创建一个对应于 Categories 表的实体并使用枚举(如上定义)作为关键属性类型。然后,您将再次对数据库中作为 Categories 表的外键的所有属性使用枚举类型。

【讨论】:

  • 这似乎很容易出错,因为表和枚举很容易不同步。如果 Code First 和 Migrations 包括将 NET 枚举映射到表,就像here 所讨论的那样,那就太好了
  • 由于您的 C# 枚举类型和数据库中的值之间没有硬链接,因此总是存在不同步的风险。
  • @subsci - 有一个nuget package for that。不幸的是,我正在寻找另一个方向,所以这对我没有帮助。
  • 我认为这不是一个好建议,因为开发人员负责手动将表上的 id 绑定到域上的数值。
  • 要求枚举值与表 ID 匹配是可维护性问题的一半;帮自己一个忙,避免它。
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 2019-08-14
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多