将表列映射到枚举并将查找表映射到枚举

问题描述 投票:0回答:2

我正在使用Entity Framework 6,刚刚发布,并且需要:

1 - 将表列映射到枚举;

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

这在实体框架 6 中可能吗?

谢谢你, 米格尔

entity-framework
2个回答
15
投票

您通常不会将表映射到枚举类型。您只需根据查找表中的内容定义枚举类型并使用它,而无需在模型中包含这些表。例如,对于 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,
}

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


0
投票

最近遇到了类似的问题,并对缺乏有关该主题的信息感到惊讶。 我首先有一个数据库 EF 映射,并希望将查找表映射到枚举(以便生成枚举)。 现在,您希望利用使用 EF Core 进行值转换来实现所描述的功能。

但事实是,您很可能一开始就不需要这样做。有两种情况:

  1. 您拥有查找表,并将其逆向工程为应用程序中的枚举。如果您要向查找中添加新行 - 您将必须重新构建枚举。这意味着如果没有新部署,您将无法使用新条目。那是不行的。
  2. 如果 Lookup 保持不变 - 只需在代码中写下 Enum 即可。但是,你一开始就不需要查找表。

我遇到了场景 1,所以我只是使用类对象并调用 DB 来获取值。如果你真的想限制数据库访问 - cach

© www.soinside.com 2019 - 2024. All rights reserved.