gpt4 book ai didi

oop - NHibernate 无法解析继承属性的属性

转载 作者:行者123 更新时间:2023-12-04 16:37:48 26 4
gpt4 key购买 nike

为什么 NHibernate 不能访问从抽象基类继承的属性。当我尝试在 QueryOver 中使用该属性时在Where我得到的子句

could not resolve property: ID of: TheWorkshop.Web.Models.Customer

var customer = Session.QueryOver<Customer>()
.Where(c=>c.ID ==id)
.SingleOrDefault<Customer>();

Intelisense 帮助我构建了查询并编译了解决方案,所以一个ID Customer 上的属性(property)类(class)。 ID Customer 上的属性继承自抽象 Contact依次继承自 DomainEntity<T> 的类它暴露了一个 protected 领域。

public abstract class DomainEntity<T>
{
protected Guid _persistenceId;
//...
}

public abstract class Contact : DomainEntity<Contact>
{
public virtual Guid ID
{
get { return _persistenceId; }
}

public virtual Address Address
{
get { return _address; }
set { _address = value; }
}

//...
}

在映射文件中

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
assembly="TheWorkshop.Web"
namespace="TheWorkshop.Web.Models"
default-access="field.camelcase-underscore"
default-lazy="true">
<class name="Contact" table="Contacts" abstract="true">
<id name="_persistenceId" column="ID" type="Guid" access="field"
unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid.comb" />
</id>
<!-- ... -->
<union-subclass name="Customer" table="Customers">

answer to a similar question 之后我更新到 NHibernate 3.3.3-CR1来自 NHibernate 3.3.2.4000但我仍然有同样的问题。

最佳答案

问题是 NHibernate 无法从我的映射中推断出如何解析 ID 属性。因此,尽管这些类编译得很好,并且抽象基类上的 _persistenceId 属性可以通过实现类上的 getter 访问,但由于 之间的名称不匹配_persistenceIdID NHibernate 无法遵循这一点。

(更简单的)解决方案是更改我的名字以匹配。有一个更难的解决方案,涉及实现 IProperyAccessor , IGetterISetter接口(interface),并提供传递字符串 ID 的路径,以便使用 ClassName access strategy .

这两个解决方案中更简单的只是将 _persistenceId 重命名为 _id(并更新对它的所有引用)所以

<id name="_persistenceId" column="ID" type="Guid" access="field" 
unsaved-value="00000000-0000-0000-0000-000000000000">

成为

<id name="Id" column="Id" type="Guid" 
unsaved-value="00000000-0000-0000-0000-000000000000">

注意 我还能够在更新的 ID 映射中删除 access="field"

关于oop - NHibernate 无法解析继承属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com