1

是否可以使用从 FNH 映射自动递增来创建十进制作为主键?

4

2 回答 2

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();
于 2014-07-07T03:12:44.393 回答
0

要实现自增身份类型必须是整型int、long、uint、ulong。

前任 :

公共类用户 { 公共虚拟 int Id { 获取;放; } 公共虚拟 IList 名称 { 获取;放; } }

Id(x => x.ID).Column("ID").GeneratedBy.Increment();

对于十进制属性: Id(x => x.ID).Column("ID").GeneratedBy.Assigned();

在创建新对象时分配值。值应该是数据库中最后生成的键的增量。

或者你可以为 NHibernate 实现一个自定义 ID 生成器。 http://lucisferre.net/2009/07/14/implementing-a-custom-id-generator-for-nhibernate/

于 2012-11-30T05:15:33.260 回答