0

我是新與功能NHibernate列的,我有一個問題與特定的HasMany關係。功能NHibernate錯誤:必須有相同的號碼作爲參照的主鍵

我有三個對象:UserCompanyCompanyAddress

User引用Company正確Company將引用CompanyAddress(但失敗)。

Company映射是由像以下:

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是:

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

但我收到此錯誤:

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引用此外鍵?

[編輯]

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?

我不想USER_ID字段添加到[地址]。[COMPANY_LIST表,我不希望添加用戶id字段AddressCompany類......「原因是無用場...的關係是:

user.LIST
的applicationID(PK)
ID(PK)

company.LIST
的applicationID(PK)(FK - > user.LIST(的applicationID))
ID(PK)
用戶id(PK)(FK - > user.LIST(ID))

address.COMPANY_LIST
的applicationID(PK)(FK - > company.LIST(的applicationID))
ID(PK)
companyId(PK)(FK - > company.LIST(ID))

爲什麼nhibe rnate想逼我只引用確切的主鍵?
可以參考我公司類的主鍵的一個子集?

感謝這麼多...

回答

0

錯誤似乎很不言而喻的從你的映射和錯誤消息

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])

您映射CompanyMap地圖中的主鍵的三列

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

但CompanyAddressMap你到公司只引用地圖返回公司2列

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

將ID列添加到列列表中。

相關問題