nhibernate外键必须与引用的主键具有相同的列数

本文关键字:引用 nhibernate | 更新日期: 2023-09-27 18:01:49

我使用的是NHibernate 3.3和FluentNHibernate 1.3。

我的数据库有两个表:InvoiceHeader和InvoiceDetail。标题有一个包含两列的复合键。详细信息具有单列主键。问题是detail没有组合键的两个部分;它只有一部分。不存在外键约束

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。配置-外键(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必须与引用的主键(tInvoiceHeader [DWInvoiceID, InvTimeID])具有相同的列数NHibernate。FKUnmatchingColumnsException:外键(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必须与引用的主键(tInvoiceHeader [DWInvoiceID, InvTimeID])具有相同的列数在NHibernate.Mapping.ForeignKey。AlignColumns(表referencedTable)在NHibernate.Mapping.ForeignKey.AlignColumns ()在NHibernate.Cfg.Configuration。SecondPassCompileForeignKeys(表表,isset完成)NHibernate.Cfg.Configuration -外键(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必须与引用的主键(tInvoiceHeader [DWInvoiceID, InvTimeID])具有相同的列数NHibernate。FKUnmatchingColumnsException:外键(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必须与引用的主键(tInvoiceHeader [DWInvoiceID, InvTimeID])具有相同的列数在NHibernate.Mapping.ForeignKey。AlignColumns(表referencedTable)在NHibernate.Mapping.ForeignKey.AlignColumns ()在NHibernate.Cfg.Configuration。SecondPassCompileForeignKeys(Table Table, ISet done)

这个可行吗?我的查询总是从标题到细节,而不是相反。我不能修改这些表

nhibernate外键必须与引用的主键具有相同的列数

我在升级nHibernate和Fluent nHibernate后遇到了这个问题。它似乎与列名混淆了。

解决方案是手动命名我的列,这个问题就解决了。

public void Override(AutoMapping<Record> mapping)
    {
        mapping.Id(x => x.Id).Column("RecordId");
        mapping.Map(x => x.Name).Not.Nullable();
        mapping.References(x => x.Parent).Not.Nullable().Column("ParentRecordId");
        mapping.References(x => x.Type).Not.Nullable().Column("TypeId");
    }