流畅的nhibernate映射嵌套属性“找不到getter”

时间:2012-08-09 03:27:36

标签: nhibernate orm fluent-nhibernate fluent-nhibernate-mapping

好的,这可能是一个双重问题。我有一个班级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映射中引用它,并且我仍然会尝试将计算类转换为真实类的转换错误。我不可能理解为什么在这一点上甚至会有一个计算类型..

1 个答案:

答案 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); 
            });
    }
}