我有一个类似于以下的类(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'
当然它找不到一个二传手,它不应该!如何使这种映射工作?
答案 0 :(得分:4)
真正的问题是,为什么流利的NHibernate会尝试映射Age属性?它甚至不在您的映射中。在整个自动映射功能之前,我只使用了早期版本的流畅NHibernate,并且从未遇到过这个问题。
我怀疑您的约定导致它尝试映射Age,或者您以某种方式启用了自动映射,这与您的手动映射相冲突。
另外请注意,Fluent NHibernate最近有些改变了惯例。所以我会看一下以下文档:
http://wiki.fluentnhibernate.org/show/Conventions
http://wiki.fluentnhibernate.org/show/ConvertingToNewStyleConventions