nhibernate'虚拟'字段

时间:2009-10-19 19:13:43

标签: nhibernate mapping field

我希望在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。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我找到了答案。我只需要从.hbm.xml映射文件中删除IsSweepAccount,这样它就不会尝试将其映射到表中的字段。从C#侧看,它似乎是表中的一个字段。