具有自动增量的流畅Nhibernate十进制主键

时间:2012-11-30 05:04:00

标签: c#-4.0 nhibernate-mapping fluent

是否可以使用FNH映射自动递增将Decimal创建为主键?

2 个答案:

答案 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/