2011-11-09 2 views
1

복합 키가있는 표가 있는데 그 중 하나는 ID 필드입니다. ID 필드는 분명히 나중에 추가되었습니다. 왜냐하면 ID가 복제되는 곳이 1000 개 이상 있기 때문에 고유 키를 제공하기 위해 복합 키의 두 번째 부분에 의존하기 때문입니다.FluentNHibernate를 사용하는 복합 키의 식별 필드

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 매핑은 다음과 같습니다 (약칭 함) : 다음은 테이블 선언입니다

System.Data.SqlClient.SqlException : Cannot insert explicit value for identity column in table 'tblSaveCommissions' when IDENTITY_INSERT is set to OFF. 
: 지금은 레코드를 삽입 할 때

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(); 
    } 

, 나는 다음과 같은 오류가 발생합니다

이 작업을 수행하기 위해 매핑을 어떻게 작동합니까?

답변

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); 
      }) 
    } 
}