我正在使用使用複合鍵的遺留數據庫。我正在嘗試使用NHibernate將新記錄插入到數據庫中。 NHibernate的規定,我必須手動創建標識,但是當我試圖用這個ID來插入我得到的消息:使用NHibernate插入帶複合鍵的記錄
System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'tablename' when IDENTITY_INSERT is set to OFF.
因爲它們是由總部設在美國給予我不能碰任何的數據庫設置。
我發現我可以通過做一個數據庫插入:
insert into tablename (tablename_country_id, /*extra fields here*/) values (16, /*extra values here*/)
和tablename_id
列自動遞增。
是否有可能編寫某種處理程序,允許我創建一個ID
對象,並設置CountryId
並自動遞增Id
屬性。
乾杯。
例如代碼:
表定義:
CREATE TABLE [dbo].[tablename](
[tablename_country_id] [int] NOT NULL,
[tablename_id] [int] IDENTITY(1,1) NOT NULL,
-- more fields here
CONSTRAINT [pk_tablename] PRIMARY KEY
(
[tablename_country_id] ASC,
[tablename_id] ASC
)
)
類文件:
public class ModelObject
{
public ID { get; set; }
// more properties here
}
public class ID : INHibernateProxy
{
public int Id { get; set; }
public int CountryId { get; set; }
public ILazyInitializer HibernateLazyInitializer { get { throw new ApplicationException(); } }
}
映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model" assembly="API">
<class name="ModelObject" table="dbname.dbo.tablename" lazy="false">
<composite-id name="Id" class="ID">
<key-property name="Id" column="tablename_id" type="int" />
<key-property name="CountryId" column="tablename_country_id" type="int" />
</composite-id>
<!-- more properties here -->
</class>
</hibernate-mapping>
這會如何影響緩存對象?特別是`session.Get(id);`可能在`tablename_id`列中有重複。 –
zonkflut
2009-06-16 00:29:10
此選項將引發FKUnmatchingColumnsException'必須具有與引用的主鍵相同的列數' – zonkflut 2009-06-16 06:02:43