使用NHibernate映射我现有的ID列,以保持身份递增

时间:2009-09-11 08:54:31

标签: sql-server nhibernate orm

我正在学习NHibernate来学习比linq更强大的ORM到sql,但我正在努力解决一些简单的事情。

我的第一个挑战是使用hbm.xml映射此ID列。

CREATE TABLE [dbo].[Party](
   [Id] [int] IDENTITY(1,1) NOT NULL
 CONSTRAINT [PK_Party] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

当我使用以下映射时,我得到一个奇怪的导出模式DDL

   <class name="Party" table="Party">
     <id name="Id">
      <column name="Id" />
      <generator class="native" ></generator>
     </id>
   </class>

使用导出工具生成以下内容

create table Party (
    Id INT IDENTITY NOT NULL,
    primary key (Id)
)

使用Nhibernate,如何添加群集主键和自动递增Id?

或者,NHibernate中的世界是如何让你的数据库模式与映射分开并使用generator = native?

我开始认为如果你已经有一个微调到特定服务器的数据库模式,NHibernate不应该用于模式生成。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不明白。 您已经拥有了数据库,那么为什么要使用NHibernate来生成数据库的模式? 我只是为我的类创建映射,以便它们映射到现有的数据库模式?

我不知道是否可以在您的NHibernate映射中指定主键应该在聚簇索引上等...因为这是特定于RDBMS的。聚集索引的概念对于SQL Server来说是非常特殊的。

答案 1 :(得分:1)

假设您正在使用Microsoft SQL(看起来像这样),NHibernate生成的模式DDL 创建主键作为聚簇索引。

默认情况下,MSSQL将主键创建为聚簇索引(实际上,我认为它们总是聚集在一起)。