Enumとのマッピング

次のリリースからサポート予定です。
使用例ですが、テーブルの定義とレコードの定義は次のようになります。PersonテーブルのJobKindカラムにJobKind列挙型をマッピングします。

DDL

create table Person (
PersonId int identity primary key,
PersonName varchar(50),
JobKind int,
VersionNo int not null
);

F# の 列挙型 と レコード型

type JobKind =
| Salesman = 0
| Manager = 1

type Person =
{ [<Id(IdKind.Identity)>]
PersonId : int
PersonName : string
JobKind : JobKind
[<Version>]
VersionNo : int }

サポートするのは、列挙型の値(0とか1とか)のマッピングです。名前(SalesmanとかManagerとか)でのマッピングはサポートしません。名前をサポートすると列挙型をビットフラグで扱うときにトラブルの元になりそうだからです。具体的には、ビットフラグで複数のフラグのオンにしているときの名前はそれぞれの要素の名前をカンマ区切りにしたものになりますが、カラムの長さに気をつけなくちゃいけないとか、カンマの前後にスペースが入った場合に検索しづらくなるとかが思い浮かびます。属性指定で両方選択できるようにしてもいいのですが、シンプルに作るということでサポートしません。
列挙型の内部の値の型はデフォルトではInt32ですが、Int32以外も使えます。それらの型はサポートします。

列挙型はパターンマッチングで使えるので、F#との相性がいいですね。列挙型に対する拡張メソッドと組み合わせて使うとより便利そうです。