3

好的,这可能是一个双重问题。我有一个类User,它包含一个Location类型的属性UserLocation。起初,我同时映射User,并将它们都存储在UserLocation数据库中,但这对我来说没有多大意义,因为 for 的唯一目的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”。我也得到了一堆转换错误,因为 NHibernate 似乎仍在为UserLocation. 所以我想问题是从映射的自定义类中引用非映射自定义类的最佳方法是什么

哦,补充一下,我很确定它UserLocation没有被映射到任何地方。我什至尝试从映射中删除对它的引用,但在User尝试将计算类转换为真实类时仍然遇到转换错误。我无法理解为什么此时甚至会有一个计算类型..

4

1 回答 1

9

你所拥有的是一个组件。组件在 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); 
            });
    }
}
于 2012-08-09T07:38:36.097 回答