好的,这可能是一个双重问题。我有一个班级User
,其中包含Location
类型的属性UserLocation
。起初,我正在映射两者 User
类和 UserLocation
类,并将它们存储在数据库中,但这并没有对我来说很有道理,因为UserLocation
的唯一目的是成为User
的一部分。无论如何,现在,我的映射看起来像这样:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id).Access.ReadOnlyPropertyThroughLowerCaseField().GeneratedBy.Identity();
Map(x => x.Location.Address);
Map(x => x.Location.City);
Map(x => x.Location.State);
Map(x => x.Location.ZipCode);
}
}
但是我收到错误“找不到UserLocation.Address
的getter”。我也得到了一堆转换错误,因为似乎NHibernate仍在为UserLocation
生成一个计算类。所以我想问题是从映射的中引用非映射自定义类的最佳方法是什么。
哦,只是要添加,我很确定UserLocation
没有被映射到任何地方。我甚至尝试从User
映射中引用它,并且我仍然会尝试将计算类转换为真实类的转换错误。我不可能理解为什么在这一点上甚至会有一个计算类型..
答案 0 :(得分:8)
你所拥有的是component。组件在NHibernate中单独映射。
您的Fluent NHibernate映射应如下所示:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id).Access.ReadOnlyPropertyThroughLowerCaseField()
.GeneratedBy.Identity();
Component(x => x.Location,
loc =>
{
loc.Map(x => x.Address);
loc.Map(x => x.City);
loc.Map(x => x.State);
loc.Map(x => x.ZipCode);
});
}
}