国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

一個簡單O/R M組件(HFSoft.Data).NET

2024-07-10 13:03:45
字體:
供稿:網(wǎng)友
  • 本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 一直想用o/r m的模式去開應(yīng)用系統(tǒng);但在。net下又沒有成熟的產(chǎn)品,nhibernate雖然不錯但結(jié)構(gòu)比較復(fù)雜,如果出現(xiàn)問題維護(hù)起來也比較麻煩。所以打算自己編寫這樣一個組件,在使用、維護(hù)和擴(kuò)展方面的都比較容易把握;對項目的后期維護(hù)也比較有利。組件功能上也遠(yuǎn)比不上nhibernate,只實(shí)現(xiàn)了單表和視圖的映射操作、查詢對象化等功能。在設(shè)計的過程也參考了nhibernate的設(shè)計方式,畢竟nhibernate的設(shè)計不錯可以直接拿過來使用。根據(jù)自己的情況修改一下就可以了。在設(shè)計時第一個考慮的問題就是組件對多類型數(shù)據(jù)庫的支持,所以針對數(shù)據(jù)庫提供者提取接口;在設(shè)計這個接口時nhibernate給我?guī)砗艽蟮膯l(fā);可以說是直接引用了它的設(shè)計原理。當(dāng)數(shù)據(jù)庫提供者接口完成后,就可以針對這個接口做數(shù)據(jù)庫處理的工作了。idatasession數(shù)據(jù)操作描述,包括找開連接、啟用事務(wù)、插入對象、刪除對象等操作。idrivertype數(shù)據(jù)庫提供者描述,主要用于描述數(shù)據(jù)庫類型關(guān)鍵的東西,如果數(shù)據(jù)庫連接對象、對應(yīng)的command類型等。

    iexpression 條件表達(dá)式描述,用于處理查詢過程中的條件;從些接口實(shí)現(xiàn)的條件表達(dá)式有:=、>、<>、like、in等;組件還有很多對象進(jìn)行內(nèi)部處理的:類的映射信息,主要和忝相就應(yīng)的sql語句和命令對象;緩存類用于緩存操作命令對象、命令對持久化接口等。

    類和數(shù)據(jù)庫的關(guān)系映射       實(shí)體類和數(shù)據(jù)庫表的關(guān)聯(lián)采用了xml文件描述,相應(yīng)對nhibernate業(yè)說比較簡單.       以下是描述employees類和employees表對映象關(guān)系。       類文件

    using system;

    namespace northwind.entitys

    {

         /// <summary>

         /// employees

         /// </summary>

         public class employees

         {

             public employees()

             {

                  //

                  // todo: 在此處添加構(gòu)造函數(shù)邏輯

                  //

             }

             public const string f_employeeid="employeeid";

             private int32 memployeeid;

             /// <summary>

             /// [int identity]

             /// </summary>

             public int32 employeeid

             {

                  get

                  {

                       return memployeeid;

                  }

                  set

                  {

                       memployeeid = value;

                  }

             }

             public const string f_lastname="lastname";

             private string mlastname;

             /// <summary>

             /// [nvarchar]

             /// </summary>

             public string lastname

             {

                  get

                  {

                       return mlastname;

                  }

                  set

                  {

                       mlastname = value;

                  }

             }

             public const string f_firstname="firstname";

             private string mfirstname;

             /// <summary>

             /// [nvarchar]

             /// </summary>

             public string firstname

             {

                  get

                  {

                       return mfirstname;

                  }

                  set

                  {

                       mfirstname = value;

                  }

             }

              ………………..

             ………………..        映射關(guān)系的xml文件

           <?xml version="1.0" encoding="utf-8" ?>

    <class name="northwind.entitys.employees,northwind.entitys" table="employees">

         <id name="employeeid" column="employeeid" value="select @@identity ,false"/>

         <property name="lastname" column="lastname"/>

         <property name="firstname" column="firstname"/>

         <property name="title" column="title"/>

         <property name="titleofcourtesy" column="titleofcourtesy"/>

         <property name="birthdate" column="birthdate"/>

         <property name="hiredate" column="hiredate"/>

         <property name="address" column="address"/>

         <property name="city" column="city"/>

         <property name="region" column="region"/>

         <property name="postalcode" column="postalcode"/>

         <property name="country" column="country"/>

         <property name="homephone" column="homephone"/>

         <property name="extension" column="extension"/>

         <property name="photo" column="photo"/>

         <property name="notes" column="notes"/>

         <property name="reportsto" column="reportsto"/>

         <property name="photopath" column="photopath"/>

    </class>

        

    組件的使用     當(dāng)類和映射文件建立以后,就通過組件對類的操作來實(shí)現(xiàn)數(shù)據(jù)操作。為了實(shí)現(xiàn)動態(tài)配置,組件配置的方式和nhibernate是一樣的,只是配置節(jié)有所不同。

    <configsections>

             <section name="dataconfig" type="hfsoft.data.dataconfigsectionhandler, hfsoft.data, version=0.9.1.0, culture=neutral, publickeytoken=null" />

    </configsections>

    <dataconfig>

             <drivertype value="hfsoft.data.sqldriver, hfsoft.data, version=0.9.1.0, culture=neutral, publickeytoken=null"/>

             <connectionstring  value="data source=.;initial catalog=northwind;user id=sa;pwd=;"/>

             <mappingassemblys>

                  <assembly value="northwind.entitys"/>

             </mappingassemblys>

             <cachecommands default="3"/>

    </dataconfig>

        

    添加一條雇員信息

    hfsoft.data.mappingcontainer mapcontainer = hfsoft.data.mappingcontainer.configcontainer;

                       using(hfsoft.data.idatasession session = mapcontainer.opensession())

                       {

                           session.open();

                           northwind.entitys.employees emp = new northwind.entitys.employees();

                           emp.reportsto = 3;

                           emp.firstname ="fan";

                           emp.lastname = "henry";

                           emp.photo = new byte[0];

                           emp.hiredate = datetime.parse("2002-12-31");

                           emp.birthdate = datetime.parse("1979-1-28");

                           emp.city ="廣州";

                           emp.country ="中國";

                           session.save(emp);

                           messagebox.show(emp.employeeid.tostring());

                          

                       }

        

    獲取所有雇員信息

    using(hfsoft.data.idatasession session = mapcontainer.opensession())

                       {

                           session.open();

    system.collections.ilist  myds = session.list(typeof(northwind.entitys.employees),null);

                           this.datagrid1.datasource = myds;

                       }

    多條件查詢(雇員編號大于等于3并且小于等于10或者姓包含fan)

    hfsoft.data.expression expression = new hfsoft.data.expression();

    expression.add(new hfsoft.data.rteqexpression(northwind.entitys.employees.f_employeeid,3));

    expression.add(new hfsoft.data.leeqexpression(northwind.entitys.employees.f_employeeid,10));

    expression.add(hfsoft.data.uinttype.or,new hfsoft.data.likeexpression(northwind.entitys.employees.f_firstname,"fan%"));

                       using(hfsoft.data.idatasession session = mapcontainer.opensession())

                       {

                           session.open();

    system.collections.ilist  myds = session.list(typeof(northwind.entitys.employees),expression);

                           this.datagrid1.datasource = myds;

                       }

    獲取雇員信息并修改

    using(hfsoft.data.idatasession session = mapcontainer.opensession())

                       {

                           session.open();

    northwind.entitys.employees emp = (northwind.entitys.employees)session.load(typeof(northwind.entitys.employees),41);

                           emp.firstname ="kfc";

                           session.update(emp);

                          

                       }

         組件為了提高效率,增加了緩存機(jī)制??梢酝ㄟ^配置文件制定對插入數(shù)據(jù)、修改數(shù)據(jù)的命令對象進(jìn)行緩存的數(shù)量。當(dāng)組件需要調(diào)用對象的插入命令時就會從緩存中找,當(dāng)找不到的情況下才創(chuàng)建相關(guān)命令對象,這樣會減少創(chuàng)建所帶來的性能問題;同樣緩存會占用相應(yīng)的內(nèi)存資源。組件現(xiàn)在還決少查詢命令對象、數(shù)據(jù)集、實(shí)體對象的緩存。實(shí)體對象緩存比較復(fù)雜,中間還存在著和數(shù)據(jù)庫信息同步、頻繁鎖的問題;還沒有想到較好的解決方法,暫時沒有打算把實(shí)體緩存集成到組件中。

    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 行唐县| 三亚市| 龙南县| 太原市| 寿光市| 舒城县| 大厂| 宁晋县| 定日县| 嫩江县| 慈溪市| 托里县| 平阴县| 尼木县| 吴忠市| 巴林左旗| 博罗县| 新乡市| 怀仁县| 门源| 石嘴山市| 萨迦县| 富川| 文登市| 宜兰县| 正宁县| 额济纳旗| 咸宁市| 旬阳县| 新营市| 宕昌县| 贡山| 晋城| 长治县| 英德市| 龙川县| 灵台县| 太原市| 阿巴嘎旗| 晋江市| 阿巴嘎旗|