0

私はこれらのクラスを持っています:

class A
{
    public virtual Guid Id { get;set; }
    public virtual B Data { get; set; }
}

class B
{
    public IList<byte[]> InnerData1 { get; set; } // (1)
    public IList<C> InnerData2 { get; set; } // (2)
}

class C
{
    public int Value1 { get; set; }
    public int? Value2 { get; set; }
}

クラス A の次のマッピング:

Id(x => x.Id).GeneratedBy.Guid();
Component(x => x.Data,
    m => 
        {
            m.HasMany(x => x.InnerData1).Element("InnerData1").Not.LazyLoad(); // (1)
            m.HasMany(x => x.InnerData2).Element("InnerData2").Not.LazyLoad(); // (2)
        });

設定(1)は正常に機能し、自動的にテーブルを作成して適切に参照するため、例外をスローする(2)に問題があります。

Could not determine type for: (...), for columns: NHibernate.Mapping.Column(InnerData1)

なぜ問題なくすべてを作成しIList<byte[]>、問題があるのwith IList<C>ですか? C に別のマッピングを設定する必要がありますか? 他にもっと簡単な方法はありませんか?Cのモデルに追加のID列を追加したくない.

4

1 に答える 1

0

C は複合型 (複数の値を持つ型) であるため、C を明示的にマップする必要があります。明示的な id 列を持つ必要はありません

HasMany(x => x.InnerData2)
    .Component(x => 
    {
        x.Map(c => c.Value1, "Value1").Not.Nullable();
        x.Map(c => c.Value2, "Value2");
    })
    .Not.LazyLoad();
于 2013-01-08T13:11:38.027 に答える