【发布时间】:2015-06-19 12:39:04
【问题描述】:
LinqToDB 能否将 Enum 属性的值存储为 Enum 的字符串值而不是整数值?
public enum OrderType
{
New,
Cancel
}
[Table("Orders")]
public class Order
{
[PrimaryKey, Identity]
public int OrderId { get; set; }
[Column]
public OrderType Type { get; set; }
}
如何让 LinqToDB 将“新建”或“取消”存储到数据库而不是 0 或 1?
更新: 似乎 LinqToDB 的答案是在枚举上设置 MapValue 属性。我一直试图找到在数据对象上指定它的位置。
public enum OrderType
{
[LinqToDB.Mapping.MapValue(Value = "NEW")]
New,
[LinqToDB.Mapping.MapValue(Value = "CANCEL")]
Cancel
}
这会将枚举中的指定值作为文本存储在数据库中。
【问题讨论】:
-
为什么要将一个自然是数值的值存储为字符串值?
-
我认为他/她希望能够从数据库中查询数据并获得有意义的结果。最好在数据库中有一个表来表示您在代码中拥有的枚举。然后,您可以加入这些以获取有意义的查询数据,以及在其他地方不使用它们的性能。但是,这将产生一个问题,即在更改枚举值时需要更新两个点。
-
需要枚举字符串值的原因是因为我正在尝试将它与现有数据库一起使用,考虑从当前正在使用的 Castle Activerecord 迁移的选项。
-
你最后做了什么?
-
@DWright 我对问题添加了更新,解决方案是在枚举上添加 MapValue 属性。