程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 使用NHibernate作為ORM容易碰到的問題

使用NHibernate作為ORM容易碰到的問題

編輯:關於.NET

1、Could not initialize proxy - no Session.

原因:hibernate3 many-to-one的默認選項是 lazy = "proxy"

>解決方法:<many-to-one>  & <set> 中設置 lazy="false"

其實只在<many-to-one>中設置lazy="false"就可以了,在set也設置的話會多一次查詢。

>2、沒有主鍵的表如何編寫.hbm.xml配置文件

>有.hbm.xml配置中都需要一個

<id name="ID">
     <generator class="guid"></generator>
</id>

沒有<id>配置節的話會報錯,但是有的表就是沒有主鍵的。

比如說有的從表,例如訂單明細表,在大部分情況下是不需要主鍵的。

其實沒有<id>也可以,但是需要有<composite-id>,也就是聯合主鍵。聯合主鍵就是幾個屬性唯一標識當前記錄。

換個思路了,把所有的屬性加在一起作為聯合主鍵。

<composite-id>
      <key-property name="Amount"></key-property>
      <key-property name="CreateTime"></key-property>
      <key-property name="ModifyTime"/>
    </composite-id>

3、聯合主鍵之後需要注意的地方

使用聯合主鍵之後對應的Model需要實現Equals和GetHashCode方法,否則會報錯。

public override bool Equals(object obj)
     {
         var item = obj as CRMTypeCustomer;
         return this.CRMTypeID == item.CRMTypeID
             && this.CustomerID == item.CustomerID;
     }
     public override int GetHashCode()
     {
         return base.GetHashCode();
     }

4、此SqlServerParameterCollection 的 Count=4 的索引 4 無效

原因是:

從表關聯主表時的問題.

<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model"/>

修改為:

<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model" insert="false" update="false"/>

即添加屬性

insert="false" update="false"

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved