gpt4 book ai didi

.net - 尝试访问 NHibernate 中的类型鉴别器字段

转载 作者:行者123 更新时间:2023-12-04 23:07:08 27 4
gpt4 key购买 nike

我的 map 上有一个类库,它继承了两个新类

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Business" namespace="Business.Test">
<class name="BaseExample" table="base_example" abstract="true" discriminator-value="0">
<id name="Id" column="id" type="Int64" unsaved-value="0">
<generator class="native"/>
</id>
<discriminator column="domain" type="Int16" not-null="true" force="true" />
....
....
</class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Business" namespace="Business.Test">

<subclass name="Example1" extends="BaseExample" discriminator-value="1">
....
....
</subclass>
</hibernate-mapping>

一切正常,但是如果我要求该字段,例如:
var Clients = ClientFactory.GetAll().Where(c => c.UserData.BaseExample.Domain == 1);

抛出此异常:异常消息:无法解析属性:域:Business.Entities.BaseExample

如何判断它是一类还是另一类?

最佳答案

鉴别器是在 NHibernate 的幕后使用的(参见 Rippo 的示例)。这个想法是您查询 类(class) 并且来自该类映射的适当鉴别器被注入(inject)到查询中。

但是,如果出于某种原因您需要在属性中使用该信息,则可以将其作为属性包含在内。这意味着

<class name="BaseExample" table="base_example" abstract="true" discriminator-value="0">
<id name="Id" column="id" type="Int64" unsaved-value="0">
<generator class="native"/>
</id>
<discriminator column="domain" type="Int16" not-null="true" force="true" />
<property name="domain" column="domain" type="Int16" update="false" insert="false" />
....
....
</class>

将属性声明为只读 ( update="false" insert="false") 很重要,因为这是一个完全由 nhibernate 管理的列。

关于.net - 尝试访问 NHibernate 中的类型鉴别器字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528815/

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