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を使用できます
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を削除することができます.
まず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を削除することができます.