0

Fluent NHibernateで新しく、特定のHasMany関係に問題があります。Fluent NHibernateエラー:参照される主キーと同じ列数を持つ必要があります

私は3つのオブジェクトがあります。UserCompanyCompanyAddress

User正しくCompanyCompanyAddressを参照(これは失敗した)でしょうCompany参照を。

Companyマッピングは次のように構成されています

public class CompanyAddressMap : ClassMap<CompanyAddress> 
{ 
    public CompanyAddressMap() 
    { 
     Schema("[address]"); 
     Table("COMPANY_LIST"); 

     this.CompositeId(x => x.key) 
      .KeyProperty(x => x.applicationId, "APPLICATION_ID") 
      .KeyProperty(x => x.id, "ID") 
      .KeyProperty(x => x.entityId, "COMPANY_ID"); 

     this.Map(x => x.country, "COUNTRY"); 
     this.Map(x => x.province, "PROVINCE"); 
     this.Map(x => x.region, "REGION"); 
     this.Map(x => x.city, "CITY"); 
     this.Map(x => x.address, "[ADDRESS]"); 
     this.Map(x => x.description, "DESCRIPTION"); 

     this.References(x => x.company) 
      .Class<Company>() 
      .Columns("APPLICATION_ID", "COMPANY_ID") 
      .Insert() 
      .Update() 
      .Fetch.Select() 
      .Not.LazyLoad() 
      .Cascade.None(); 
    } 
} 

が、私はこのエラーが表示されます:

public class CompanyMap : ClassMap<Company> 
{ 
    public CompanyMap() 
    { 
     Schema("company"); 
     Table("LIST"); 

     this.CompositeId(x => x.key) 
      .KeyProperty(x => x.applicationId, "APPLICATION_ID") 
      .KeyProperty(x => x.id, "ID") 
      .KeyProperty(x => x.userId, "USER_ID"); 

     this.Map(x => x.vat, "VAT"); 

     this.HasMany(x => x.addresses) 
      .Not.LazyLoad() 
      .Cascade.None(); 

     this.References(x => x.user) 
      .Class<User>() 
      .Columns("APPLICATION_ID", "USER_ID") 
      .Insert() 
      .Update() 
      .Fetch.Select() 
      .Not.LazyLoad() 
      .Cascade.None(); 
    } 
} 

CompanyAddressがある

Foreign key (FK8DE1BC098F20893F:COMPANY_LIST [APPLICATION_ID, COMPANY_ID])) must have same number of columns as the referenced primary key (LIST [APPLICATION_ID, ID, USER_ID])

私は非主にAddressCompanyを参照する必要がキーはCompanyです既にUserによって参照されていますので、私の質問は

です。データベースに定義されている実際の外部キーを変更せずにこの外部キーをFluent NHibernateで参照するにはどうすればよいですか?

[EDIT]

i need to reference AddressCompany with non the primary key 'cause Company is already referenced by User and so my question is: how can i reference this foreign key using fluent nhibernate without modifying the real foreign key defined into the database?

私は[アドレス]。[COMPANY_LIST]テーブルにUSER_IDフィールドを追加したくないと私はAddressCompanyクラスにはuserIdフィールドを追加する必要はありません...」原因は役に立たない分野である...関係は以下のとおりです。

user.LIST
APPLICATIONID(PK)
ID(PK)

company.LIST
アプリケーションID(PK)(FK - > user.LIST(アプリケーションID))
ID(PK)
のuserId(PK)(FK - > user.LIST(ID))

address.COMPANY_LIST
アプリケーションID(PK)(FK - > company.LIST(アプリケーションID))
ID(PK)
企業ID(PK)(FK - > company.LIST(ID))

理由元気rnateは正確な主キーのみを参照するようにしたいのですか?
私はCompanyクラスの主キーのサブセットを参照できますか?

ありがとうございます...

答えて

0

エラーは次の3つのように列

this.CompositeId(x => x.key) 
     .KeyProperty(x => x.applicationId, "APPLICATION_ID") 
     .KeyProperty(x => x.id, "ID") 
     .KeyProperty(x => x.userId, "USER_ID"); 

が、CompanyAddressMapにおける当社へのご参考だけのためのあなたの主キーをマップするCompanyMapのマッピング、マッピングおよびエラーメッセージ

Foreign key (FK8DE1BC098F20893F:COMPANY_LIST [APPLICATION_ID, COMPANY_ID])) must have same number of columns as the referenced primary key (LIST [APPLICATION_ID, ID, USER_ID])

から明らかかなり自己です2列の会社に戻る

this.References(x => x.company) 
     .Class<Company>() 
     .Columns("APPLICATION_ID", "COMPANY_ID") 
     .Insert() 
     .Update() 
     .Fetch.Select() 
     .Not.LazyLoad() 
     .Cascade.None(); 

列のリストにID列を追加します。

関連する問題