是否可以使用FNH映射自动递增将Decimal创建为主键?
答案 0 :(得分:2)
我遇到了同样的事情。 fluent-nhibernate
似乎是enforcing this constraint。
如果您知道数据库允许这样做(在这种情况下,应该没问题),您可以绕过约束,如下所示:
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();
答案 1 :(得分:0)
要实现自动增量,标识类型必须是整数int,long,uint,ulong。
前:
公共类用户 { public virtual int Id {get;组; } public virtual IList Names {get;组; } }
Id(x =&gt; x.ID).Column(“ID”)。GeneratedBy.Increment();
表示十进制属性: Id(x =&gt; x.ID).Column(“ID”)。GeneratedBy.Assigned();
在创建新对象时指定值。值应该是数据库中最后生成的密钥的增量。
或者您可以为NHibernate实现自定义ID生成器。 http://lucisferre.net/2009/07/14/implementing-a-custom-id-generator-for-nhibernate/