我正在运行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方法中手动生成它们。如果您需要了解任何其他信息,请告诉我们!
答案 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吗?