輕型的ORM類Dapper

來源:互聯網
上載者:User

標籤:ice   value   list   delete   sqldiag   border   style   open   src   

Dapper是一個輕型的ORM類。代碼就一個SqlMapper.cs檔案,主要是IDbConnection的擴充方法,編譯後就40K的一個很小的dll。官方網站http://code.google.com/p/dapper-dot-net/ ,也可以通過Nuget進行安裝

  • Dapper很快。Dapper的速度接近與IDataReader。
  • Dapper支援主流資料庫 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的資料庫
  • 支援多表並聯的對象。支援一對多 多對多的關係,並且沒侵入性。
  • 原理通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象
  • Dapper文法十分簡單。並且無須遷就資料庫的設計 

Query()方法:
        Query()是IDbConnection擴充方法並且重載了,從資料庫裡提取資訊,並用來填充我們的業務物件模型。

  • 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也可以載入填充嵌套對象,考慮這樣一種情形,考慮到新聞的類別屬性,返回類別對象。

    1,在填充嵌套對象的時候,只好執行ToList<>方法,否則回報ExecuteReader 要求已開啟且可用的串連。串連的目前狀態為已關閉,而單個對象不會報錯,估計是using結束後關閉了串連,而嵌套對象在map的時候又執行了ExecuteReader,只好在using結束之前返回list集合。 
    2,嵌套對象的參數是比較多的,主要是前兩個參數,其它參數沒用可以設定為null。特別要注意的是splitOn,這個參數不可為空,否則會報對象為引用的錯誤。【splitOn參數的意思是讀取第二個對象的的分割列,從哪個列起開始讀取第二個對象,如果表裡的自增長列都為Id,可以設定這個參數為”Id”】.

    Execute方法: 
    正如Query方法是檢索資料的,Execute方法不會檢索資料,它與Query方法非常相似,但它總返回總數(受影響的行數),而不是一個對象集合【如: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; } }

     

輕型的ORM類Dapper

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.