【问题标题】:Could not find the property - exception after switching from NHibernate 3 to 3.3.1找不到属性 - 从 NHibernate 3 切换到 3.3.1 后出现异常
【发布时间】:2012-11-02 08:56:51
【问题描述】:

我有一个带字段的类:

    protected DateTime insertDate;

这是该字段的映射:

    <property name="InsertDate" access="field.camelcase" update="false" />

此字段在使用ctor时设置

    public DocuBase(DateTime insertDate)

并且仅在将行添加到数据库时才会持久化。 我根本不需要属性,没有 setter 和 getter。我在 NHibernate 3 工作。

现在,我已经从 NHiberbate 3 迁移到 NHibernate 3.3.1,并且在创建会话工厂时出现此异常:

找不到与字段关联的属性“InsertDate” “插入日期”,在“XXXX”类中

为什么会发生?如何更改映射以消除异常?

编辑:以下答案完全正确。但是对于那些不需要/不想拥有属性且只有字段的人,还有另一种解决方案:

  • 将 name 属性设置为字段名称(在我的例子中是 insertDate)并记住具有正确的列名

    <property name="insertDate" column="InsertDate" access="field.camelcase" update="false" />
    

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    这是大小写敏感性,这将起作用。

    <property name="insertDate" column="InsertDate" update="false" />
    

    看起来在 3.1.0 版本中,有一个 breaking change

    NH 今天接受以下代码。如果这会抛出会更好 - 当使用公共接口的属性名称(或成员信息)配置 NH(或 3rd 方工具)时,它会导致问题,而不是通过 hbm。

    [hbm]
    <property name="Name" access="field.camelcase" />
    
    [code]
    string name;
    public virtual string SomeThingCompletelyDifferent{
                                      get {return name;}
                                      set{name=value;}
    }
    

    注意:这将是一个重大变化。

    ps - 更新答案以删除对使用私有集的属性的引用,因为这不是正在寻找的内容,并且上述重大更改更相关。

    【讨论】:

    • 好吧,我没有房产。我不需要它。我只需要一个字段 - 问题中提到了它。
    • 好的,听你说,不过你可以切换到一个属性来测试它吗?可能会稍微隔离问题。
    • 将其转换为财产作品。但我不喜欢它:) 另一个有效的解决方案与你写的类似,即: -这是我现在正在使用的解决方法。然而,我很好奇为什么 NHibernate 3.3.1 首先要寻找一个属性。
    • 有什么不喜欢的?说真的,我拥有的财产和你的领域有什么区别?仅仅因为我想不出有影响的原因并不意味着没有。与 NHibernate 合作从未使用或见过太多领域。不确定性能是否是一个重要因素:jaychapman.blogspot.ie/2007/11/…可能是他们已经弃用了一些用法,将看看他们的发行说明
    • @dragonfly 发现了重大变化,现在用它更新答案
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多