Entity Framewor 学习笔记 (Enum)

本文介绍了EF6在处理Enum类型时的方法,包括如何在不同环境下(如MySQL与SQL Server)处理Enum,以及如何在JSON序列化和反序列化中转换Enum。此外还涉及了在WebAPI2 OData V4中使用Enum的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 .

 

转载于:https://www.cnblogs.com/keatkeat/p/4307205.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值