我有一个带有复合键的表,其中一部分是Identity字段。 Identity字段显然后来被添加,因为有超过1000个地方重复身份,因此依赖于复合键的第二部分来提供唯一性。这是表格声明:
CREATE TABLE [dbo].[tblSaveCommissions](
[SaveTransID] [int] NOT NULL,
[CommID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[AccountNumber] [varchar](40) NULL,
... (extra fields)
CONSTRAINT [PK_tblSaveCommissions] PRIMARY KEY CLUSTERED
(
[SaveTransID] ASC,
[CommID] ASC)
)
FluentNHibernate映射看起来像这样(缩写):
public class SaveCommissionMap : ClassMap<SaveCommissionEntity>
{
public SaveCommissionMap()
{
Table("tblSaveCommissions");
CompositeId()
.KeyProperty(x => x.Id, "CommID")
.KeyProperty(x => x.SaveTransactionId, "SaveTransId");
Map(x => x.AccountNumber);
References(x => x.SaveTransaction)
.Column("SaveTransId").Not.Insert().Not.Update();
}
现在,当我尝试插入记录时,出现以下错误:
System.Data.SqlClient.SqlException : Cannot insert explicit value for identity column in table 'tblSaveCommissions' when IDENTITY_INSERT is set to OFF.
如何使用映射来完成这项工作?
答案 0 :(得分:0)
另一种可能性是使SaveCommission
成为SaveTransaction的依赖组件。
class SaveTransaction
{
public virtual IList<SaveCommission> Commissions { get; set; }
}
class SaveTransactionMap : ClassMap<SaveTransaction>
{
public SaveTransactionMap()
{
HasMany(x => x.Commissions)
.KeyColumn("SaveTransID")
.AsBag()
.OrderBy("CommID")
.Component(c =>
{
c.ParentReference(x => x.SaveTransaction);
c.Map(x => x.AccountNumber);
})
}
}