FNH マッピングから自動インクリメントを使用して、プライマリ キーとして Decimal を作成することは可能ですか??
2 に答える
私は同じことに出くわしました。がこの制約fluent-nhibernate
を強制しているようです。
データベースがこれを許可することがわかっている場合 (この場合は問題ないはずです)、次のように制約をバイパスできます。
Id(x => x.MyDecimalId).GeneratedBy.Custom<IdentityGenerator>();
これは同じ戦略を使用しますIdentity()
が、例外は発生しません。私の場合、次のように拡張メソッドを追加しましたIdentityGenerationStrategyBuilder<IdentityPart>
。
public static class IdentityPartExtensions
{
public static void NumericIdentity(this IdentityGenerationStrategyBuilder<IdentityPart> identityBuilder)
{
identityBuilder.Custom<IdentityGenerator>();
}
}
したがって、次のことができます。
Id(x => x.MyDecimalId).GeneratedBy.NumericIdentity();
自動インクリメントを実現するには、ID 型が整数の int、long、uint、ulong である必要があります。
元 :
public class User { public virtual int Id { get; 設定; } パブリック仮想 IList 名 { get; 設定; } }
Id(x => x.ID).Column("ID").GeneratedBy.Increment();
10 進プロパティの場合: Id(x => x.ID).Column("ID").GeneratedBy.Assigned();
新しいオブジェクトを作成するときに値を割り当てます。値は、データベースで最後に生成されたキーの増分である必要があります。
または、NHibernate 用のカスタム ID ジェネレーターを実装することもできます。 http://lucisferre.net/2009/07/14/implementing-a-custom-id-generator-for-nhibernate/