当我们将枚举从C#序列化到SQL Server时,我们使用NCHAR(3)数据类型,其中包含枚举值的每个值的助记符值。 这样我们就可以轻松阅读SELECT qry。
如何将枚举保存到数据库中?
您使用什么数据类型?
答案 0 :(得分:6)
更好的方法是将其存储为int。这样你就可以从数据库中反序列化/转换回正确的枚举值。
如果将来可能更改枚举,则使用显式值,例如
public enum ActionType
{
Insert = 1,
Update = 2,
Delete = 3
}
作为助记符存储的实用性必然会导致你的冲突取决于你的助记符生成算法?
答案 1 :(得分:3)
我使用带有ID&的单独参考数据表。每个枚举的描述。您可以将它们全部分组到一个表中,其中包含ID,Type&描述,但我发现你经常最终想要扩展这些表,如果你将所有的参考数据分组到一个表中,从长远来看它会让生活变得更加艰难。
答案 2 :(得分:3)
我一直只是在MSSQL中使用查找表,否则我会在支持它们的数据库中使用枚举。如果使用某种char类型,则必须使用检查约束来确保插入或更新的值是枚举的成员。
当枚举成员发生变化时,我一直觉得向查询表添加条目比改变检查约束更容易。
答案 3 :(得分:1)
我把它们作为整数。 它真正的可爱把它们互相投射 (int)enum和(enum)int :) 另外我最喜欢的是dropdownlist.datasource = Enum.GetNames(typeof(EnumType));
这太原始了,因为你在谈论很多复杂的东西
答案 4 :(得分:0)
nchar(3)用于助记符?
正如Martin指出的那样,使用一个查询表,其中INT为PK,VARCHAR标识为UK,NVARCHAR描述。
您可以编写一个存储过程来将表值编写为C#enum或C#public consts。
因此,这些值都记录在数据库和C#源代码中。
答案 5 :(得分:0)
Here is my answer on a different thread.
我认为最好的方法是使用带有int的查找表,如上所述,但将其与代码生成相结合以保持DRY原则(不要重复自己)。
答案 6 :(得分:0)
它没有。有一个模糊的等价物:
Genre VARCHAR(10)NOT NULL CHECK(流派IN('男','女','其他')