Entity Framewor 学习笔记 (Enum)

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://stackoverflow.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://stackoverflow.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 .

 

posted @ 2015-03-01 16:13  兴杰  阅读(482)  评论(0)    收藏  举报