我希望在nhibernate类中有一个'virtual'(不存在,不要与virtual关键字混淆)字段。
我有一个证券表,我希望有一个'虚拟'字段,使用另一个字段来返回一个标志。
我在db_securities表中添加了一个计算字段nhibernate class:
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'.
和SQL显示它正在创建一个select并引用该列名,这应该没问题。
我在java / hibernate中做了大约一年前成功的事情。这是我第一次尝试同样的事情 在nhibernate。
我错过了什么?
答案 0 :(得分:1)
我看不出有任何理由在映射文件中包含该字段,因为它没有持久保存到数据库中。如果您确实想要保留它,那么您可以使用访问策略和命名约定映射私有成员isSweepAccount。
答案 1 :(得分:0)
我找到了答案。我只需要从.hbm.xml映射文件中删除IsSweepAccount,这样它就不会尝试将其映射到表中的字段。从C#侧看,它似乎是表中的一个字段。