EF 6 支持Enum 的处理
首先说一下 mysql 和 sql server 的区别
mysql 是有 Enum 这个类型的 , insert 时是放入 int , 出来的时候它会是 string (int to str 是设定在 mysql 内的)
mssql 不支持 Enum 这个类型,也不好模拟. (有人用 check constraint 来模拟,我觉得不太理想)
入题,
sql 应该使用 int.
EF 对 Enum 会自行替换成 int ,我们就是要 Enum 就好
Json.net 在反序列化时是会处理Enum的,
在序列化时就不会,但我们可以自己调一下就可以了。
http://*.com/questions/2441290/json-serialization-of-enum-as-string
在使用 web api 2 odata v4 时也可以使用 Enum
public enum OrderStatusEnum
{
unpaid,
paid,
completed
}
[Table("order_test")]
public class OrderTest
{
[Key]
public int id { get; set; }
public string data { get; set; }
public OrderStatusEnum statusEnum { get; set; }
}
Entity 就这么写,controller 一如往常没什么区别
在做 REST 时,如果要 $filter 是这样写的 $filter=statusEnum eq EFDB.OrderStatusEnum'completed'" (namespace + enumClass + string)
做post, put 时,写 string 就可以了。
js : string
c# : Enum
sql : int
for Odata convert display name 可以参考 :
http://*.com/questions/1415140/can-my-enums-have-friendly-names
https://github.com/OData/WebApi/blob/master/OData/src/System.Web.OData/OData/Formatter/Serialization/ODataEnumSerializer.cs
可以 odata response format 哪里拦截到 type = isEnum() 然后overwrite 掉default的converter .