我希望在nhibernate类中有一个' virtual‘(不在那里,不要与virtual关键字混淆)字段。
我有一个证券表格,我想有一个‘虚拟’字段,它使用另一个字段来返回一个标志。
我已经在db_securities表的nhibernate类中添加了一个计算字段:
public class DB_Securities
{
private string cusip;
private string securityDescription;
...
private string classCode;
...
private String isSweepAccount;
...
public virtual string ClassCode
{
get { return classCode; }
set { classCode = value; }
}
...
public virtual String IsSweepAccount
{
get
{
isSweepAccount = (classCode > 20 && ClassCode < 25)?"Y":"N" ;
return isSweepAccount;
}
set { isSweepAccount = value; }
}
}我有一个DB_Securities.hbm.xml
<class name="<namespace>.DB_Securities, <assembly>" lazy="true" table="Securities">
<id name="Cusip" type="String" length="9">
<generator class="assigned" />
</id>
<property name="SecurityDescription" type="String" length="36"/>
...
<property name="ClassCode" type="String" length="3"/>
...
<property name="IsSweepAccount" type="String" update="false" insert="false"/>我认为这应该允许我访问字段IsSweepAccount,就好像它在表中一样,但我得到:
Inner Exception = Invalid column name 'IsSweepAccount'.以及显示它正在创建select并引用该列名的SQL,这应该没问题。
大约一年前,我在java/hibernate中成功地做了这件事。这是我在nhibernate中第一次尝试做同样的事情。
我遗漏了什么?
发布于 2009-10-19 19:24:01
我看不出有任何理由要在映射文件中包含该字段,因为它没有持久化到数据库中。如果您确实希望持久化它,那么可以使用访问策略和命名约定来映射私有成员isSweepAccount。
发布于 2009-10-19 19:22:57
我找到了答案。我只需要从.hbm.xml映射文件中删除IsSweepAccount,这样它就不会尝试将其映射到表中的字段。从C#端看,它似乎是表中的一个字段。
https://stackoverflow.com/questions/1590530
复制相似问题