<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Restful.Data輕量級數(shù)據(jù)持久層組件

          聯(lián)合創(chuàng)作 · 2023-09-30 02:36

          Restful.Data是一套通用的輕量級數(shù)據(jù)持久層組件,除封裝了ADO.NET基本的數(shù)據(jù)庫操作以外,也提供了一些orm相關的API,用戶可以方便的定義實體類,并使用這些API對數(shù)據(jù)進行增刪改查等操作。 Restful.Data借鑒了業(yè)界如nhibernate、entity framework等知名的數(shù)據(jù)持久層組件,但從一開始設計的初衷就是為了讓用戶能快速的學習和使用,并寫出更加簡潔優(yōu)雅的代碼,所以摒棄了一些復雜的設計和功能,用戶可以使用變通的方式或方法使用Restful.Data組件實現(xiàn)其目的。 Restful.Data充分考慮了實體框架的執(zhí)行效率問題,進行了反復的推敲和論證,盡可能的采用高效的設計方案來提高性能。

          誰需要Restful.Data? 

          敢于冒險、追求完美、勇于挑戰(zhàn)并極具責任感的程序設計人員。

          Restful.Data提供哪些功能?

          基本的ADO.NET操作:    BeginTransaction    ExecuteScalar    ExecuteDataReader    ExecuteDataTable    ExecuteDataSet    ExecutePageQuery    ExecuteStoredProcedure

          ORM相關操作:    Insert    Updete    Delete    Find

          如何使用Restful.Data? 

          使用前的準備:  下載Restful.dll、Restful.Data、Restful.Data.MySql、Remotion.Linq.dll、MySql.Data.dll,或者直接下載源代碼進行編譯并獲取這5個dll,并在項目中引用這些dll。

          在 Web.config 或 App.config 中配置連接字符串,如下:

          注冊提供程序工廠:  SessionFactories.Register();  提供程序工廠在一個Application中僅需注冊一次。

          如何進行基本的數(shù)據(jù)庫操作:

          using( ISession session = SessionFactory.CreateDefaultSession() ){
              string sql = "select * from Person";
              DataTable dt = session.ExecuteDataTable( sql );
          }

          CreateDefaultSession默認情況下根據(jù)配置文件中連接字符串節(jié)點的第一項創(chuàng)建數(shù)據(jù)庫連接,你可以調(diào)用CreateSession進行指定,或者你也可以使用 SessionFactory.Default = "MySql2"指定默認連接。

          未防止 SQL 注入,你也使用呆參數(shù)方法:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              string sql = "select * from Person where Id = @Id;";
          IDictionary<string, object> parameters = new Dictionary<string, object>();
          parameters.Add( "@Id", 5 );
          DataTable dt = session.ExecuteDataTable( sql, parameters );
          }

          與此類似的還有ExecuteScalar、ExecuteDataReader、ExecuteDataTable、ExecuteDataSet等方法。

          如何進行分頁查詢:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
                string sql = "select * from User where CreateTime < @CreateTime";
            IDictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add( "@CreateTime", DateTime.Now );
            // 查詢第2頁,每頁10條,并根據(jù) CreateTime 字段降序排列
            PageQueryResult result = session.ExecutePageQuery( sql01, 2, 10, "CreateTime DESC", parameters );
          }

          如何進行數(shù)據(jù)新增:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              var person = new Person();
          // person.Id = 1; 若Id字段為自增類型,無需指定。
          person.Name = "test01";
          person.CreateTime = DateTime.Now;
          person.IsActive = true;
          int i = session.Insert( person );
          }

          如何進行數(shù)據(jù)更新:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              var person = new Person();
          person.Id = 1; 
          person.Name = "test01";
          person.CreateTime = DateTime.Now;
          person.IsActive = true;
          // 在調(diào)用此方法時,務必指定實例的主鍵值。
          int i = session.Update( person );
          }

          或者你也可以批量更新:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              var person = new Person();
          // person.Id = 1; 
          person.Name = "test01";
          person.CreateTime = DateTime.Now;
          person.IsActive = true;
          // 在調(diào)用此方法時,不需要指定主鍵值,且不會更新主鍵字段
          session.Update<Person>().Set( person ).Where( s => s.IsActive == false ).Execute();
          }

          如何進行數(shù)據(jù)刪除:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              var person = new Person() { Id = 1 };
          // 在調(diào)用此方法時,需要指定主鍵值
          session.Delete( person );
          }

          或者你也可以批量刪除:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              // 在調(diào)用此方法時,不需要指定主鍵值
              session.Delete().Where( s => s.IsActive == false ).Execute();
            }

          如何進行單表查詢:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              var queryable = session.Find()
                  .Where( s => s.Name.Contains("a") )
                  .Where( s => s.CreateTime < DateTime.Now )
                  .OrderBy( s => s.CreateTime )
                  .Skip(5)
                  .Take(10);
          var list = queryable.ToList();
          var count = queryable.Count();
          var first = queryable.FirstOrDefault();
          var queryable1 = from s in session.Find<Person>()
                      where s => s.Name.Contains("a")
                      orderby s.CreateTime descending
                      select new { Id = s.Id, Name = s.Name };
          // ...
          }

          目前只支持對單表的LINQ查詢,且為了降低復雜度,后期也并不打算支持多表查詢,對函數(shù)的支持也有限,僅支持string類型的 StartsWith、EndsWith、Contains、Equals、IsNullOrEmpty等方法,對于其他方法后期將會繼續(xù)完善。

          如果你需要實現(xiàn)一個復雜的查詢并將其轉(zhuǎn)換成對象,你也可以這樣:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              string sql = "...";
          T @object = session.Find<T>( sql );
          }

          如何支持事務處理:

          using( ISession session = SessionFactory.CreateDefaultSession() )
            {
              using( DbTransaction transaction = session.BeginTransaction() )
              {
                  // ...
                  // ...
              transaction.Commit();
          }
          }

          SessionHelper的使用:

          SessionHelper對session對象的方法進行了靜態(tài)封裝,如果你只是需要執(zhí)行單條語句,并馬上關閉連接,你可以使用 SessionHelper 類中提供的一些輔助方法。

          5、如何定義實體類

          [Serializable]
          public class Person : EntityObject  // 需繼承與 EntityObject 類
          {
              private int m_Id;
              private string m_Name;
              private int? m_Age;
              private decimal? m_Money;
              private DateTime m_CreateTime;
              private bool m_IsActive;
          
          
              [PrimaryKey, AutoIncrease]  // 如果是自增字段,標記為 AutoIncrease;如果是主鍵標記為 PrimaryKey
              public int Id
              {
                  get { return this.m_Id; }
                  set { this.m_Id = value; this.OnPropertyChanged( "Id", value ); }
              }
          
              public string Name
              {
                  get { return this.m_Name; }
                  set { this.m_Name = value; this.OnPropertyChanged( "Name", value ); }
              }
          
              public int? Age
              {
                  get { return this.m_Age; }
                  set { this.m_Age = value; this.OnPropertyChanged( "Age", value ); }
              }
          
              public decimal? Money
              {
                  get { return this.m_Money; }
                  set { this.m_Money = value; this.OnPropertyChanged( "Money", value ); }
              }
          
              public DateTime CreateTime
              {
                  get { return this.m_CreateTime; }
                  set { this.m_CreateTime = value; this.OnPropertyChanged( "CreateTime", value ); }
              }
          
              public bool IsActive
              {
                  get { return this.m_IsActive; }
                  set { this.m_IsActive = value; this.OnPropertyChanged( "IsActive", value ); }
              }
          }

          6、總結

          因作者時間關系,組件目前并非十分完善,測試工作也只簡單的進行了一部分,但您可以完全放心的應用于商業(yè)項目中,如遇到問題,作者將盡可能的解決。

          瀏覽 11
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品99久久久久久久久久久久 | 91美女裸体 | 日韩AV乱伦大全 | 国严精品99欧美一级片在线观看 | 一道夲一二三区区 |