将GUID与SQL Server和NHibernate一起使用

时间:2010-10-06 15:57:15

标签: asp.net sql nhibernate sql-server-ce guid

我正在运行NHibernate和SQL Server CE我试图使用GUID作为我的ID列。这是我已有的代码:

映射:

  <class name="DatabaseType" table="DBMON_DATABASE_TYPE">
    <id name="Id" column="DATABASE_TYPE_ID">
      <generator class="guid" />
    </id>
    <property name="DispName" />
  </class>

这是它创建的创建语句:

create table DBMON_DATABASE_TYPE (
    DATABASE_TYPE_ID BIGINT not null,
   DispName NVARCHAR(255) null,
   primary key (DATABASE_TYPE_ID)
)

这是我希望能够在其上运行的插入语句:

Insert into DBMON_DATABASE_TYPE (DATABASE_TYPE_ID,DISPNAME) values ('f5c7181e-e117-4a98-bc06-733638a3a264','DOC')

这是我在尝试时得到的错误:

Major Error 0x80040E14, Minor Error 26306
> Insert into DBMON_DATABASE_TYPE (DATABASE_TYPE_ID,DISPNAME) values ('f5c7181e-e117-4a98-bc06-733638a3a264','DOC')
Data conversion failed. [ OLE DB status value (if known) = 2 ]

我的目标是再次使用GUID作为我的表的ID列,它们甚至不需要自动生成,我可以在NHibernate的Save / SaveOrUpdate方法中手动生成它们。如果您需要了解任何其他信息,请告诉我们!

3 个答案:

答案 0 :(得分:1)

而不是

DATABASE_TYPE_ID BIGINT not null,

它需要

DATABASE_TYPE_ID UNIQUEIDENTIFIER not null,

我强烈建议您使用NEWSEQUENTIALID()作为默认值,因为它将它用作聚簇索引,因为它不会导致页面拆分而因此碎片化,请参阅此处如何使用它{{3} }

答案 1 :(得分:1)

在映射中,您需要确定您希望NHibernate在数据库模式中创建GUID(看起来您正在从nhibernate映射生成模式)。在我的头脑中,以下应该有效:

<id name="Id" column="DATABASE_TYPE_ID" type="Guid">
  <generator class="guid" />
</id>

答案 2 :(得分:1)

我敢建议使用GuidComb吗?