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列添加到列列表中。

相关问题