De http://www.primordialcode.com/blog/post/nhibernate-give-primary-key-schemaexport-sql-server-sql-express, aquí es una solución:
NHibernate no ofrece (todavía) una instalación para dar un nombre a la clave principal (nada de lo que he encontrado, sin embargo, admito que me no soy un gurú de NHibernate, sino un usuario promedio). Puede utilizar un enfoque similar al expuesto en mi publicación anterior.
En este ejemplo estoy usando SQL Server/SQL Express como mi motor de base de datos y las consultas se crean con eso en mente.
<?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>
Con esta consulta se obtiene el nombre real de la clave principal que era generada por NHibernate, esto es específico a SQL Server/SQL Express y se le utiliza un motor de base de datos diferente que tiene para adaptar esas consultas (sé que pierdes el desacoplamiento al motor de base de datos ofrecido por NHibernate, pero puedes configurar algunas estrategias para cargar diferentes asignaciones de acuerdo con tu dialecto actual).
Utilizamos un procedimiento almacenado en el sistema que nos permite renombrar el objeto que obtuvimos antes.
Hmm, con suerte, se agregará pronto. Estamos utilizando Fluent, por lo que probablemente solo crearemos un script separado para ejecutar la creación de esquema posterior. Gracias por el enlace! – Andy
El enlace ahora está roto. Otro ejemplo de un comentario pobre de StackOverflow. –
@FrancoisBotha Me disculpo por no cumplir con sus expectativas con esta respuesta de 2010. Sin embargo, algunas búsquedas ligeras me llevan a la conclusión de que el punto principal de que esto no es compatible sigue siendo válido. –