Entity Framewor学習ノート(Enum)

2406 ワード

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 v 4を使用する場合にも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を削除することができます.