日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NH3.X与2.X使用上的一些区别

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NH3.X与2.X使用上的一些区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NH用了很長時間一直都是用2.X版本,今天體驗了一下3.3。記錄一下兩者使用上的一些區別。

一、代理

//2.x 寫法 <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>//3.X寫法 <property name='proxyfactory.factory_class'>NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>

因為3.X已經內部集成proxy generator,因此無需另外的NHibernate.ByteCode.LinFu.dll or NHibernate.ByteCode.Castle.dll了。

?

二、延遲加載

public class Childpublic class Parent {Public virtual Child Child{get;set;} }
Parent p=XXXXXXX; If (p.Child is Child) { //do something }

由于有代理的延遲加載,p.Child并不是Child類型。此處的is判斷是false。

NH3.X的Parent Map文件中<many-to-one name="Child" lazy="no-proxy"/>將會有兩個效果

  • Child屬性依然是延遲加載(NH2.X若聲明是no proxy會立即加載)
  • 首次訪問Child屬性時,NH會從數據庫加載數據,并且返回實際類型。
  • 三、Hql寫法的變更

    2.X刪除數據的寫法

    ISession session= GetSession(); string hql = "from table1 tab where DataTime between :a and :b"; IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime }; session().Delete(hql, new object[] { startDate, endDate }, itypes);

    以上的寫法在3.X中會產生異常: KeyNotFoundException: 給定關鍵字不在字典中。

    ?

    3.X寫法1:放棄參數命名,全部用?代替,閱讀性不是太好。

    ISession session= GetSession(); string hql = "from table1 tab where DataTime between ? and ?"; IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime }; session().Delete(hql, new object[] { startDate, endDate }, itypes);

    3.X寫法2:該方法與上一種差不多,但在hql中聲明了是delete操作。

    string hql = "delete from table1 tab where DataTime between ? and ?"; IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime }; IQuery q = session.CreateQuery(hql); for (int i = 0; i < vals.Length; i++) {q.SetParameter(i, vals[i], itypes[i]); } q.ExecuteUpdate();

    ?

    3.X寫法3:每個hql參數用SetXXType顯式賦值。

    string hql = "delete from table1 tab where DataTime between :start and :end"; IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime }; IQuery q = session.CreateQuery(hql); q.SetDateTime(“start”,a); q.SetDateTime(“end”, b); q.ExecuteUpdate();

    雖然SetParameter重載了多個方法,但position只能用于“?”聲明的hql,name只能用于命名參數的hql。否則會產生異常。

    IQuery SetParameter(int position, object val, IType type);IQuery SetParameter(string name, object val, IType type);

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/Byeah/archive/2013/03/25/2981093.html

    總結

    以上是生活随笔為你收集整理的NH3.X与2.X使用上的一些区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。