2011-11-09 18 views
1

コンポジットキーを持つテーブルがあり、その一部はIDフィールドです。 Identityフィールドは、識別情報が複製される場所が1000を超えるため、後で明確に追加されました。したがって、一意性を提供するために複合キーの第2部分に依存しています。FluentNHibernateを使用したコンポジットキーのIDフィールド

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); 
      }) 
    } 
} 
関連する問題