【问题标题】:Identity field in a Composite Key using FluentNHibernate使用 FluentNHibernate 的复合键中的标识字段
【发布时间】:2011-11-09 16:59:14
【问题描述】:

我有一个带有复合键的表,其中一部分是一个身份字段。 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.

如何使用映射来完成这项工作?

【问题讨论】:

    标签: nhibernate identity composite-key


    【解决方案1】:

    另一种可能性是使 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);
                })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 1970-01-01
      • 2010-10-08
      • 2019-06-30
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2018-11-07
      • 2012-04-29
      相关资源
      最近更新 更多