Dapper.NET 使用簡單舉例


概述

Dapper是.NET下一個micro的ORM,它和Entity Framework或Nhibnate不同,屬於輕量級的,並且是半自動的。也就是說實體類都要自己寫。它沒有復雜的配置文件,一個單文件就可以了。

現在已經取代了原來的SqlHelper優點:

  • 使用Dapper可以自動進行對象映射!
  • 輕量級,單文件。
  • 支持多數據庫。
  • Dapper原理通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象
  • 由於Dapper ORM的操作實際上是對IDbConnection類的擴展,所有的方法都是該類的擴展方法。所以在使用前先實例化一個IDBConnection對象。所以調用之前,一定先加上命名空間:using Dapper;
  • Nuget查詢Dapper,點擊安裝即可引入第三方DLL

使用舉例

數據庫表結構

----Book表,主表
CREATE TABLE [dbo].[Book]( [BookId] [
int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Book] PRIMARY KEY CLUSTERED ( [BookId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ----BookReview類似於book評價表 CREATE TABLE [dbo].[BookReview]( [Id] [int] IDENTITY(1,1) NOT NULL, [BookId] [int] NULL, [Content] [nvarchar](50) NULL, CONSTRAINT [PK_BookReview] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[BookReview] WITH CHECK ADD CONSTRAINT [FK_BookID_BookPreBookid] FOREIGN KEY([BookId]) REFERENCES [dbo].[Book] ([BookId]) GO ALTER TABLE [dbo].[BookReview] CHECK CONSTRAINT [FK_BookID_BookPreBookid] GO

 

實體結構

public class Book
    {
        public Book()
        {
            Reviews = new List<BookReview>();
        }
        public int BookId { get; set; }
        public string Name { get; set; }
        public virtual List<BookReview> Reviews { get; set; }
        public override string ToString()
        {
            return string.Format("[{0}]------《{1}》", BookId, Name);
        }
    }

//書評
    public class BookReview
    {
        public int Id { get; set; }
        public int BookId { get; set; }
        public virtual string Content { get; set; }
        public virtual Book AssoicationWithBook { get; set; }
        public override string ToString()
        {
            return string.Format("{0})--[{1}]\t\"{3}\"", Id, BookId, Content);
        }
    }

 

Execute執行數據庫腳本

        public static void OpeartData()
        {
            string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
            using (IDbConnection comm = new SqlConnection(sqlconnct))
            {
                comm.Open();
                //Book book = new Book() { Name="C#9論述",Id=1 };
                string query = "insert into Book(Name) values(@name)";
                //添加,可以執行SQL腳本

                //comm.Execute(query, book);
                //comm.Execute(query, new { name = "Java Learn" });


                query = "UPDATE Book SET  Name=@name WHERE BookId =@id";
                //comm.Execute(query, book);
                //comm.Execute(query, new {name="C985426",BookId=1 });

                query = "DELETE FROM Book WHERE BookId = @id";
                //var idsult=comm.Execute(query, new { name = "C985426", BookId = 1 });

                query = "select * from Book where BookId=@id";
                //var ruslt = comm.Query<Book>(query).ToList();
                // var ruslt = comm.Query<Book>(query, new { BookId = 2 }).FirstOrDefault();
            }
        }

Query執行數據庫腳本查詢

  • One To More 查詢
public static Book OpeartMoData()
        {
            string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
            using (IDbConnection conn = new SqlConnection(sqlconnct))
            {
                conn.Open();
                string query = "SELECT * FROM Book b LEFT JOIN BookReview br ON br.BookId = b.Id WHERE b.id = @id";
                Book lookup = null;
                //Query<TFirst, TSecond, TReturn>
                var b = conn.Query<Book, BookReview, Book>(query,
                 (book, bookReview) =>
                 {
                     //掃描第一條記錄,判斷非空和非重復
                     if (lookup == null || lookup.BookId != book.BookId)
                         lookup = book;
                     //書對應的書評非空,加入當前書的書評List中,最后把重復的書去掉。
                     if (bookReview != null)
                         lookup.Reviews.Add(bookReview);
                     return lookup;
                 }, new { id = 2 }, splitOn: "id").Distinct().SingleOrDefault();
                return b;
            }
        }
  • One To One 查詢
public static BookReview OpeartData1T1()
        {
            string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
            using (IDbConnection conn = new SqlConnection(sqlconnct))
            {
                BookReview br;
                string query = "SELECT br.Id,b.BookId,Content,Name FROM BookReview br  inner JOIN Book b ON br.BookId = b.BookId  WHERE br.id = @id";
                using (conn)
                {
                    br = conn.Query<BookReview, Book, BookReview>(query,
                   (bookReview, book) =>
                   {
                       bookReview.AssoicationWithBook = book;
                       return bookReview;
                   }, new { id = 4 }, splitOn: "BookId",commandType:CommandType.StoredProcedure).FirstOrDefault();
                    return br;
                }
            }
        }
  • 執行事務
public static void BookTransaction()
        {
            string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
            using (IDbConnection conn = new SqlConnection(sqlconnct))
            {
                conn.Open();
                //開始事務
                IDbTransaction transaction = conn.BeginTransaction();
                try
                {
                    string query = "DELETE FROM Book WHERE id = @id";
                    string query2 = "DELETE FROM BookReview WHERE BookId = @BookId";
                    conn.Execute(query2, new { BookId = 2 }, transaction, null, null);
                    conn.Execute(query, new { id = 2 }, transaction, null, null);
                    //提交事務
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    //出現異常,事務Rollback
                    transaction.Rollback();
                    throw new Exception(ex.Message);
                }
            }
        }

 

Dapper.NET 連接MySQL數據庫

1、通過NuGet引用MySql數據庫的客戶端MySql.Data

2、配置引用客戶端Config文件 

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="MySqlConnect" value="server=serviceip;Port=3306;User Id=root;password=avc123;Database=testdb;CharSet=utf8;"/>
  </appSettings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
</configuration>

 

3、添加編寫程序代碼調用

        /// <summary>
        /// 執行返回第一行第一列值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sqlContent"></param>
        /// <returns></returns>
        public T ExecScalarSql<T>(string sqlContent)
        {
            try
            {
                using (var conn = new MySqlConnection(SqlConnect))
                {
                    var resutl = conn.ExecuteScalar<T>(sqlContent);
                    conn.Close();
                    return resutl;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM