IDをマッピングするための規則がある場合、これは、intId列を持つintIdプロパティでhilogeneratiorを使用する一般的なマッピング方法です。
public class IdConvention : IIdConvention
{
private const int HiLoRange = short.MaxValue;
public void Apply(IIdentityInstance instance)
{
instance.Column(instance.EntityType.Name + "Id");
instance.GeneratedBy.HiLo(HiLoRange.ToString());
}
}
しかし、別の方法でマップしたいクラスがあり、代わりにIDとして割り当てられた文字列を使用して、オーバーライドを使用します。
public class SomeClassMapping : IAutoMappingOverride<SomeClass>
{
public void Override(AutoMapping<SomeClass> mapping)
{
mapping.Id(instance => instance.StringProperty).GeneratedBy.Assigned().Column("StringProperty");
}
}
これは古いバージョンのFluentNHibernate/NHibernateで機能しましたが、1.3.0.733 / 3.3.2.4000に更新すると、未処理の例外の犠牲になります。
System.InvalidOperationException:IDタイプは整数である必要があります(int、long、uint、ulong)
これは、文字列(またはIDとして他の非整数プロパティ)を使用しようとしている場合にのみ発生します。マッピングをオーバーライドして別のジェネレーターとタイプを指定することができなくなると予想される場合、または何かありますか一般的なケースでhiloを実行したいオーバーライドを非表示にするために、別の方法で実行できますか?