Từ http://www.primordialcode.com/blog/post/nhibernate-give-primary-key-schemaexport-sql-server-sql-express, đây là một cách giải quyết:
NHibernate không cung cấp (chưa) một cơ sở để đặt tên cho khóa chính của bạn (không có gì mà tôi tìm thấy tuy nhiên, tôi thừa nhận tôi 'm không phải là guru NHibernate, nhưng là người dùng trung bình). Bạn có thể sử dụng cách tiếp cận tương tự cho cách tiếp xúc trong bài đăng trước của tôi.
Trong ví dụ này, tôi đang sử dụng SQL Server/SQL Express làm công cụ cơ sở dữ liệu của mình và các truy vấn được xây dựng với ý nghĩ đó.
<?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>
Với truy vấn này bạn sẽ có được tên thực tế của khóa chính đó là tạo ra bởi NHibernate, đây là đặc trưng cho SQL Server/SQL bày tỏ và được bạn sử dụng một cơ sở dữ liệu khác nhau mà bạn có để thích ứng với các truy vấn đó (Tôi biết bạn đã tách rời công cụ cơ sở dữ liệu do NHibernate cung cấp, nhưng bạn có thể thiết lập một số chiến lược để tải các ánh xạ khác nhau theo phương ngữ hiện tại của bạn).
Chúng tôi sử dụng quy trình được lưu trữ hệ thống cho phép chúng tôi đổi tên đối tượng mà chúng tôi nhận được trước đây.
Nguồn
2017-04-26 10:36:50
Hmm, hy vọng nó sẽ sớm được bổ sung. Chúng tôi đang sử dụng Fluent, vì vậy chúng tôi có thể chỉ cần tạo một tập lệnh riêng biệt, chúng tôi chạy tạo lược đồ bài đăng. Cảm ơn các liên kết! – Andy
Liên kết hiện đã bị hỏng. Một ví dụ khác về nhận xét StackOverflow kém. –
@FrancoisBotha Tôi xin lỗi vì đã không đáp ứng được kỳ vọng của bạn với câu trả lời này từ năm 2010. Tuy nhiên, một số tìm kiếm ánh sáng khiến tôi kết luận rằng điểm chính mà điều này không được hỗ trợ vẫn hợp lệ. –