<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      輕型的ORM類Dapper

      Dapper是一個(gè)輕型的ORM類。代碼就一個(gè)SqlMapper.cs文件,主要是IDbConnection的擴(kuò)展方法,編譯后就40K的一個(gè)很小的dll。官方站點(diǎn)http://code.google.com/p/dapper-dot-net/ ,也可以通過Nuget進(jìn)行安裝

      image

      • Dapper很快。Dapper的速度接近與IDataReader。
      • Dapper支持主流數(shù)據(jù)庫(kù) Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的數(shù)據(jù)庫(kù)
      • 支持多表并聯(lián)的對(duì)象。支持一對(duì)多 多對(duì)多的關(guān)系,并且沒侵入性。
      • 原理通過Emit反射IDataReader的序列隊(duì)列,來快速的得到和產(chǎn)生對(duì)象
      • Dapper語法十分簡(jiǎn)單。并且無須遷就數(shù)據(jù)庫(kù)的設(shè)計(jì)

      Query()方法
      Query()是IDbConnection擴(kuò)展方法并且重載了,從數(shù)據(jù)庫(kù)里提取信息,并用來填充我們的業(yè)務(wù)對(duì)象模型。

                      var counters = new List<Tuple<int, PerformanceCounter>>();
                      using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlDiagnosticsDb"].ConnectionString))
                      {
                          conn.Open();
                          string sql = string.Format("select Id,ServiceName,CategoryName,CounterName,InstanceName from service_counters where MachineName='{0}'",machineName);
                          foreach (var counter in conn.Query<ServiceCounter>(sql))
                          {
                              logger.InfoFormat(@"Creating performance counter: {0}\{1}\{2}\{3}", counter.MachineName ?? ".", counter.CategoryName,
                                                  counter.CounterName, counter.InstanceName);
                              var perfCounter = new PerformanceCounter(counter.CategoryName, counter.CounterName, counter.InstanceName, counter.MachineName ?? ".");
                              counters.Add(new Tuple<int, PerformanceCounter>(counter.Id, perfCounter));
                              // first value doesn't matter so we should call the counter at least once
                              try { perfCounter.NextValue(); }
                              catch { }
                          }
                      }

      下面是ServiceCounter的定義

      public class ServiceCounter
      {
          public int Id { get; set; }

          public String ServiceName { get; set; }

          public String MachineName { get; set; }
          public String CategoryName { get; set; }
          public String CounterName { get; set; }
          public String InstanceName { get; set; }

          public String DisplayName { get; set; }
         
          public String DisplayType { get; set; }

          public override String ToString()
          {
              return String.Format(@"{0}\{1}\{2}\{3}", MachineName ?? ".", CategoryName, CounterName, InstanceName);
          }
      }

      Dapper也可以加載填充嵌套對(duì)象,考慮這樣一種情形,考慮到新聞的類別屬性,返回類別對(duì)象。

      1,在填充嵌套對(duì)象的時(shí)候,只好執(zhí)行ToList<>方法,否則回報(bào)ExecuteReader 要求已打開且可用的連接。連接的當(dāng)前狀態(tài)為已關(guān)閉,而單個(gè)對(duì)象不會(huì)報(bào)錯(cuò),估計(jì)是using結(jié)束后關(guān)閉了連接,而嵌套對(duì)象在map的時(shí)候又執(zhí)行了ExecuteReader,只好在using結(jié)束之前返回list集合。
      2,嵌套對(duì)象的參數(shù)是比較多的,主要是前兩個(gè)參數(shù),其它參數(shù)沒用可以設(shè)置為null。特別要注意的是splitOn,這個(gè)參數(shù)不能為空,否則會(huì)報(bào)對(duì)象為引用的錯(cuò)誤。【splitOn參數(shù)的意思是讀取第二個(gè)對(duì)象的的分割列,從哪個(gè)列起開始讀取第二個(gè)對(duì)象,如果表里的自增長(zhǎng)列都為Id,可以設(shè)置這個(gè)參數(shù)為”Id”】.

      Execute方法
      正如Query方法是檢索數(shù)據(jù)的,Execute方法不會(huì)檢索數(shù)據(jù),它與Query方法非常相似,但它總返回總數(shù)(受影響的行數(shù)),而不是一個(gè)對(duì)象集合【如:insert update和delete】.

      private void SaveServiceSnapshots(IEnumerable<ServiceCounterSnapshot> snapshots)
              {
                  using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlDiagnosticsDb"].ConnectionString))
                  {
                      conn.Open();
                      foreach (var snapshot in snapshots)
                      {
                          // insert new snapshot to the database
                         conn.Execute(
          @"insert into service_counter_snapshots(ServiceCounterId,SnapshotMachineName,CreationTimeUtc,ServiceCounterValue) values (
              @ServiceCounterId,@SnapshotMachineName,@CreationTimeUtc,@ServiceCounterValue)", snapshot);
                      }

                  }
              }

      ServiceCounterSnapshot的定義如下:

      public class ServiceCounterSnapshot
      {
          public int Id { get; set; }

          public int ServiceCounterId { get; set; }

          /// <summary>
          /// Machine on which the snapshot was taken.
          /// </summary>
          public String SnapshotMachineName { get; set; }

          public DateTime CreationTimeUtc { get; set; }

          public float? ServiceCounterValue { get; set; }
      }

      A Look at Dapper.NET

      關(guān)于Dapper的一些使用和擴(kuò)展的例子

      給力分享新的ORM => Dapper

      posted @ 2013-01-25 21:11  張善友  閱讀(32940)  評(píng)論(14)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产91色综合久久免费| 丰满熟女人妻一区二区三| 免费看婬乱a欧美大片| 精品国产一区二区三区蜜臀| 亚洲欧洲∨国产一区二区三区| 亚洲AV国产福利精品在现观看| 内射视频福利在线观看| 国产高清在线精品一区| 少妇爽到呻吟的视频| 99精品国产一区二区三区| 欲香欲色天天天综合和网| 九九热在线观看视频精品| 国产成人A在线视频免费| 东宁县| 亚洲成av人片天堂网无码| 精品 日韩 国产 欧美 视频| 国产精品久久精品国产| 欧美成人精品一级在线观看| 国产在线拍揄自揄视频网试看| 亚洲日韩AV秘 无码一区二区| 激情综合一区二区三区| 亚洲精品久久久久国产| 老熟女重囗味hdxx69| 亚洲经典av一区二区| 亚洲熟女乱综合一区二区| 亚洲欧美日韩综合久久久| 国产精品免费看久久久无码| 又大又粗又爽的少妇免费视频| 日韩高清国产中文字幕| 明光市| 久久精品国产一区二区三区| 麻豆果冻国产剧情av在线播放| 久久精品午夜视频| 长腿校花无力呻吟娇喘| 精品久久欧美熟妇www| 日本精品成人一区二区三区视频| 无码专区人妻系列日韩精品| 熟妇激情一区二区三区| 日本电影一区二区三区| 国产精品综合一区二区三区| 中文字幕无码视频手机免费看|