2009-10-19 69 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。