(流利的)具有计算属性的类的NHibernate映射

时间:2009-08-03 20:45:54

标签: c# nhibernate fluent-nhibernate

我有一个类似于以下的类(nb!名称已被更改以保护无辜者):

public class Person 
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual DateTime Birthday { get; set; }
    public virtual TimeSpan Age { get { return DateTime.Now - this.Birthday; } }
}

我使用Fluent NHibernate配置我的映射:

public class PersonMap : ClassMap<Person>
{
    public PersonMap() 
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Birthday);
    }
}

问题是这引发了异常:

  

找不到属性的setter   “人物”课程中的“年龄”

如果Age没有标记为虚拟,我会得到:

  

以下类型不得用作   代理:Person:方法get_Age应该   是'公共/受保护的虚拟'或   'protected internal virtual'

当然它找不到一个二传手,它不应该!如何使这种映射工作?

1 个答案:

答案 0 :(得分:4)

真正的问题是,为什么流利的NHibernate会尝试映射Age属性?它甚至不在您的映射中。在整个自动映射功能之前,我只使用了早期版本的流畅NHibernate,并且从未遇到过这个问题。

我怀疑您的约定导致它尝试映射Age,或者您以某种方式启用了自动映射,这与您的手动映射相冲突。

另外请注意,Fluent NHibernate最近有些改变了惯例。所以我会看一下以下文档:

http://wiki.fluentnhibernate.org/show/Conventions

http://wiki.fluentnhibernate.org/show/ConvertingToNewStyleConventions

http://wiki.fluentnhibernate.org/show/AutoMapping