我有这些课程:
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列。
答案 0 :(得分: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();