从
http://www.primordialcode.com/blog/post/nhibernate-give-primary-key-schemaexport-sql-server-sql-express
,这里有一个解决方法:
nhibernate还没有提供给您一个名字的设施。
主键(但是我没有找到任何东西,我承认我不是
一个普通的用户)。你可以使用类似的方法
在我以前的工作中暴露出来的。
在本例中,我使用SQL Server/SQL Express作为数据库引擎
查询是建立在这个基础上的。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
<class name="SID.Sphera.Controls.Extended.ImageRegion.Entities.ImageSheetData, SID.Sphera.Controls.Extended"
table="ImageRegionImageSheetData" lazy="false">
<id name="_Id" access="field" column="IRISD_Id" type="guid">
<generator class="guid" />
</id>
<property name="_Name" access="field" column="IRISD_Name" type="string" not-null="true" />
<property name="_ResourceId" access="field" column="IRISD_ResourceId" type="guid" not-null="true" />
<property name="_Width" access="field" column="IRISD_Width" not-null="true" type="int" />
<property name="_Height" access="field" column="IRISD_Height" not-null="true" type="int" />
<property name="_BackgroundImageId" access="field" column="IRISD_BackgroundImageId" type="guid"
not-null="false" />
<bag name="_sensitiveRegions" access="field" cascade="all-delete-orphan" lazy="false">
<key column="IRIRD_ParentImageSheetId" foreign-key="FK_IRIRD_IRISD" />
<one-to-many class="SID.Sphera.Controls.Extended.ImageRegion.Entities.ImageRegionData, SID.Sphera.Controls.Extended" />
</bag>
</class>
<!-- Primary Key Rename -->
<database-object>
<create>
DECLARE @pkName Varchar(255)
;
SET @pkName= (
SELECT [name] FROM sysobjects
WHERE [xtype] = 'PK'
AND [parent_obj] = OBJECT_ID(N'[dbo].[ImageRegionImageSheetData]')
)
;
Exec sp_rename @pkName, 'PK_ImageRegionImageSheetData', 'OBJECT'
</create>
<drop/>
</database-object>
</hibernate-mapping>
通过这个查询,您可以得到主键的实际名称,它是
由nhibernate生成,它特定于SQL Server/SQL Express
你是否使用了不同的数据库引擎,你必须适应这些
查询(我知道您松脱了与数据库引擎的耦合
由NHibernate提供,但您可以设置一些策略来加载
根据您当前的方言不同的映射)。
我们使用一个系统存储过程来重命名
我们以前得到的东西。