新しいオブジェクトが追加されたときに自動インクリメントするデータベースの主キーとして使用したい C# のオブジェクトがあります。このオブジェクトは基本的に ulong 値のラッパーであり、値の一部を追加のヒントとして使用します。データベースに「純粋な」 ulong 値として保存したいのですが、値が DB からロード/アンロードされるときに自動変換が必要です。IE、元のテーブルに基づいて値に「ヒント」ビットを適用します。
オンラインで見つけた多くの例に基づいて、独自の IUserType オブジェクトを実装する旅に出ました (このフォーラムにはたくさんのヘルプがあります)。
オブジェクトIDとして機能するObjectIdクラスがあります
class ObjectIdType: IUserType
{
private static readonly NHibernate.SqlTypes.SqlType[] SQL_TYPES = { NHibernateUtil.UInt64.SqlType };
public NHibernate.SqlTypes.SqlType[] SqlTypes
{
get { return SQL_TYPES; }
}
public Type ReturnedType
{
get { return typeof(ObjectId); }
}
...
}
次のようなマッピング クラスがあります。
public class ObjectTableMap()
{
Id(x => x.Id)
.Column("instance_id")
.CustomType<ObjectIdType>()
.GeneratedBy.Native();
}
この時点で、構成で Id は整数にしかできないという例外が発生します。それは理にかなっていると思いますが、カスタム型を実装すると、ネイティブの ulong データベース型が引き継がれて機能することを半分期待していました。
カスタムジェネレーターを作成する道をたどろうとしましたが、それでも私のスキルレベルから少し外れているので、つまずいています。
私の質問は、私がマッピングでやろうとしていることを達成することは可能ですか?