2009-10-19 72 views
0

我想在nhibernate类中有一个'虚拟'(不存在,不要与虚拟关键字混淆)字段。nhibernate'虚拟'字段

我有一个证券表,我想要一个'虚拟'字段,使用另一个字段返回一个标志。

我在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'. 

和SQL显示它正在创建一个选择并引用该列名称,应该没问题。

大约一年前,我在java/hibernate中成功完成了这件事。这是我第一次尝试 在nhibernate。

我错过了什么?

+0

“计算”可能比“虚拟”更有用(且更清晰) – 2009-10-19 19:16:56

回答

0

我找到了答案。我只需要从.hbm.xml映射文件中删除IsSweepAccount,以免它将它映射到表中的字段。从C#方面看,它似乎是表中的一个字段。

1

我看不到任何理由在映射文件中包含该字段,因为它没有被保存到数据库。如果您确实想要保留它,则可以使用访问策略和命名约定来映射私有成员isSweepAccount。