代码之家  ›  专栏  ›  技术社区  ›  veggerby

(fluent)具有计算属性的类的nhibernate映射

  •  2
  • veggerby  · 技术社区  · 15 年前

    我有一个类似于以下的A类(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 班级“人”中的“年龄”

    如果年龄不是虚拟的,我会:

    以下类型不能用作 代理:person:method get\u age should 是“公共/受保护的虚拟”或 '受保护的内部虚拟'

    当然它找不到二传手,也不应该!我怎样才能使这个映射工作?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Nathan    15 年前

    对我来说,真正的问题是为什么Fluent NHibernate要尝试绘制年龄属性?它甚至不在你的地图上。在使用整个自动映射功能之前,我只使用了FluenHibernate的早期版本,从未遇到过这个问题。

    我怀疑,要么是您的约定导致它试图映射年龄,要么是您以某种方式启用了与手动映射冲突的自动映射。

    也要注意,Fluent NHibernate最近改变了一些惯例。因此,我将查看以下文档:

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

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

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