Soma 0.1.0.1 の属性(アトリビュート)の紹介
Somaが提供する属性はたった4つです。いずれもレコード型(またはそのフィールド)にのみ指定できます。
- Id
- 主キーに対応するフィールドに指定。採番方法を設定できる
- Version
- 楽観的排他制御のためのバージョン番号に対応するフィールドに指定。現状は数値型のみ対応。将来的にSQL Serverのtimestamp型に対応するかも。
- Table
- 対応するテーブルの名称を示すためにレコード型に指定。これがない場合はレコード型の型名がテーブル名になる。
- Column
- 対応するカラムの名称を示すためにフィールドに指定。これがない場合はフィールド名がカラム名になる。
典型的な使い方はこういう感じです。
open Soma.Core.MetaId属性にIdKindにIdentityと設定するとDBで採番された値を取得できます。現状、IdKindはAssignedとIdentityの2種類です。IdKindがIdentityの場合、レコードがインスタンス化されてもまだIdが設定されていなことがあるのでEmployeeIdはint option型にしています。必ずしもoption型にしないといけないわけではなくて、マイナスのときは未設定というふうに決めて単にint型で扱ってもいいと思います。
type Employee =
{ [<Id(Kind=IdKind.Identity)>]
EmployeeId : int option
EmployeeName : string
DepartmentId : int
[<Version>]
VersionNo : 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 }