0

FluentNHibernate1.3でNHibernate3.3を使用しています。

私のデータベースには、InvoiceHeaderとInvoiceDetailの2つのテーブルがあります。ヘッダーには、2列の複合キーがあります。詳細には単一列の主キーがあります。問題は、詳細に複合キーの両方の部分が含まれていないことです。それはその一部しか持っていません。外部キーの制約はありません。

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: )NHibernate.Mapping.ForeignKey.AlignColumns()at NHibernate.Mapping.ForeignKey.AlignColumns()at NHibernate.Cfg.Configuration.SecondPassCompileForeignKeysで参照される主キー(tInvoiceHeader [DWInvoiceID、InvTimeID])と同じ数の列が必要です。 (テーブルテーブル、ISet完了)NHibernate.Cfg.Configuration-外部キー(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))には、参照される主キー(tInvoiceHeader [DWInvoiceID、InvTimeID])NHibernateと同じ数の列が必要です。FKUnmatchingColumnsException:外部キー(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))には、NHibernate.Mapping.ForeignKey.AlignColumns(テーブルreferencedTable)のNHibernate.Mappingで参照される主キー(tInvoiceHeader [DWInvoiceID、InvTimeID])と同じ数の列が必要です。 NHibernate.Cfg.Configuration.SecondPassCompileForeignKeysの.AlignColumns()(テーブルテーブル、ISet完了)

これは機能しますか?私のクエリは常にヘッダーから詳細へと進み、その逆はありません。テーブルを変更できません。

4

1 に答える 1

0

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");
    }
于 2014-04-18T19:07:07.503 に答える