自动增量(身份)在 Fluent NHibernate 中不起作用

Posted

技术标签:

【中文标题】自动增量(身份)在 Fluent NHibernate 中不起作用【英文标题】:Auto Increment (Identity) does not work in Fluent NHibernate 【发布时间】:2017-10-31 08:58:26 【问题描述】:

我正在使用 Fluent Nhibernate。 映射类如下所示:

public class CategoryMap : ClassMap<Category>


    public CategoryMap()
    
        Id(x => x.CategoryId).UniqueKey("CategoryId").GeneratedBy.Increment();
        Map(x => x.CategoryName).Not.Nullable();

        References(x => x.ParentCategory).Column("ParentCategoryId").Nullable();
    

它像我需要的那样创建表,但在 SSMS 中我看到 CategoryId 不是身份。

为什么自动增量(身份)不起作用?

【问题讨论】:

你回答了你自己的问题。自动增量不起作用,因为该列是标识 = 否。创建表时,您需要将列属性指定为 IDENTITY( [seed], [increment]) 或简单地 IDENTITY 将默认为 (1,1) 作为种子/增量。 【参考方案1】:

使用Identity而不是Increment,并且您不需要指定UniqueKey,因为主键必须是唯一的。

Id(x => x.CategoryId).GeneratedBy.Identity();

我不确定 Increment 的用例是什么或最新的 NHibernate 文档在哪里,但您可以在此处阅读第 5.1.5.1 节中的不同类型的 ID 生成器:http://nhibernate.info/doc/nhibernate-reference/mapping.html

【讨论】:

以上是关于自动增量(身份)在 Fluent NHibernate 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Fluent Assertions Should().Should().BeEquivalentTo 忽略排除的成员

向用户公开代理键

标识自动增量未应用于列

在 Firebird 数据库中创建自动增量字段的最简单方法

如何将 AzureDefaultCredentials 与 Azure Fluent 结合使用?

SQL Server 唯一的自动增量列在另一列的上下文中