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,因为它是复合类型(具有多个值的类型)。它不需要有明确的 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 回答