Soma 0.1.0.1 の属性(アトリビュート)の紹介

Somaが提供する属性はたった4つです。いずれもレコード型(またはそのフィールド)にのみ指定できます。

Id
主キーに対応するフィールドに指定。採番方法を設定できる
Version
楽観的排他制御のためのバージョン番号に対応するフィールドに指定。現状は数値型のみ対応。将来的にSQL Serverのtimestamp型に対応するかも。
Table
対応するテーブルの名称を示すためにレコード型に指定。これがない場合はレコード型の型名がテーブル名になる。
Column
対応するカラムの名称を示すためにフィールドに指定。これがない場合はフィールド名がカラム名になる。

典型的な使い方はこういう感じです。

open Soma.Core.Meta
type Employee =
{ [<Id(Kind=IdKind.Identity)>]
EmployeeId : int option
EmployeeName : string
DepartmentId : int
[<Version>]
VersionNo : int }
Id属性にIdKindにIdentityと設定するとDBで採番された値を取得できます。現状、IdKindはAssignedとIdentityの2種類です。IdKindがIdentityの場合、レコードがインスタンス化されてもまだIdが設定されていなことがあるのでEmployeeIdはint option型にしています。必ずしもoption型にしないといけないわけではなくて、マイナスのときは未設定というふうに決めて単にint型で扱ってもいいと思います。


テーブル名やカラム名をレコードの型名やフィールド名とは異なるものにしたい場合はTable属性やColumn属性を使います。

open Soma.Core.Meta
[<Table(Schema = "Sales", Name = "EMP")>]
type Employee =
{ [<Id(Kind=IdKind.Identity)>]
EmployeeId : int option
[<Column(Name = "EMP_NAME")>]
EmployeeName : string
DepartmentId : int
[<Version>]
VersionNo : int }