我正在使用 NHibernate 3.3 和 FluentNHibernate 1.3。
我的数据库有两个表:InvoiceHeader 和 InvoiceDetail。标题有一个由两列组成的复合键。详细信息有一个单列主键。问题是细节没有组合键的两个部分;它只有其中的一部分。不存在外键约束。
public class TInvoiceHeader
{
public virtual TInvoiceHeaderIdentifier Identifier { get; set; }
public virtual long Dwinvoiceid { get; set; }
public virtual int InvTimeID { get; set; }
public virtual IList<TInvoiceDetail> Details { get; set; }
....
}
public class TInvoiceHeaderIdentifier
{
public virtual long Dwinvoiceid { get; set; }
public virtual int InvTimeID { get; set; }
....
}
public TInvoiceHeaderMap()
{
CompositeId<TInvoiceHeaderIdentifier>(x => x.Identifier)
.KeyProperty(x => x.Dwinvoiceid, "DWInvoiceID")
.KeyProperty(x => x.InvTimeID, "InvTimeID");
HasMany<TInvoiceDetail>(x => x.Details).KeyColumn("DWInvoiceID");
....
}
public class TInvoiceDetail
{
public virtual TInvoiceHeader Header { get; set; }
public virtual long Dwinvoicedetailid { get; set; }
public virtual long Dwinvoiceid { get; set; }
....
}
public TInvoiceDetailMap()
{
Table("tInvoiceDetail");
LazyLoad();
Id(x => x.Dwinvoicedetailid).GeneratedBy.Identity().Column("DWInvoiceDetailId");
References<TInvoiceHeader>(x => x.Dwinvoiceid);
....
}
我不知道如何进行这项工作,因为详细信息行没有 InvTimeID 键。我越来越:
NHibernate.Cfg.Configuration - 外键 (FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID])) 必须具有与引用的主键相同的列数 (tInvoiceHeader [DWInvoiceID, InvTimeID]) NHibernate.FKUnmatchingColumnsException: 外键 (FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]) ) 必须与 NHibernate.Mapping.ForeignKey.AlignColumns() 中 NHibernate.Cfg.Configuration.SecondPassCompileForeignKeys 中 NHibernate.Mapping.ForeignKey.AlignColumns(Table referencedTable) 中引用的主键 (tInvoiceHeader [DWInvoiceID, InvTimeID]) 具有相同数量的列(表表,ISet 完成) NHibernate.Cfg.Configuration - 外键 (FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID])) 必须具有与引用的主键 (tInvoiceHeader [DWInvoiceID, InvTimeID]) NHibernate 相同的列数。FKUnmatchingColumnsException:外键 (FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID])) 的列数必须与 NHibernate.Mapping.ForeignKey.AlignColumns(Table referencedTable) 在 NHibernate.Mapping.ForeignKey 的引用主键 (tInvoiceHeader [DWInvoiceID, InvTimeID]) 的列数相同NHibernate.Cfg.Configuration.SecondPassCompileForeignKeys 的 .AlignColumns()(表表,ISet 完成)
这能行吗?我的查询将始终从标题到详细信息,反之亦然。我无法修改表格。