开源项目 05 Dapper

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json;

namespace ConsoleApp2.test1
{
    public class Class5
    {
        //原文:https://www.cnblogs.com/Sinte-Beuve/p/4231053.html
        //      https://github.com/StackExchange/Dapper


        IDbConnection conn = new SqlConnection("data source=.\\sqlexpress;initial catalog=MyDbContext;user id=sa;password=sa;");


        //Insert
        public void test1()
        {
            string query = "INSERT INTO Book(Name)VALUES(@name)";

            //对对象进行操作
            Book book = new Book();
            book.Name = "C";
            conn.Execute(query, book);

            //直接赋值操作
            conn.Execute(query, new { name = "C#" });
        }

        //update
        public void test2()
        {
            string query = "UPDATE Book SET  Name=@name WHERE id =@id";
            Book book = new Book();
            book.Id = 1;
            book.Name = "CC";
            conn.Execute(query, book);
        }

        //delete
        public void test3()
        {
            string query = "DELETE FROM Book WHERE id = @id";

            Book book = new Book();
            book.Id = 1;
            conn.Execute(query, book);

            int id = 2;
            conn.Execute(query, new { id = id });
        }

        //无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
        public void test4()
        {
            string query = "SELECT * FROM Book";
            var list = conn.Query<Book>(query).ToList();
            Console.WriteLine(JsonConvert.SerializeObject(list));

        }

        //返回单条信息
        public void test5()
        {
            string query = "SELECT * FROM Book WHERE id = @id";
            int id = 4;
            var book = conn.Query<Book>(query, new { id = id }).SingleOrDefault();
            Console.WriteLine(JsonConvert.SerializeObject(book));
        }

        //查询:1--n
        public void test6()
        {
            int id = 3;

            //查询图书时,同时查找对应的书评,并存在List中。实现1--n的查询操作
            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.Id != book.Id)
               {
                   lookup = book;
               }

               //书对应的书评非空,加入当前书的书评List中,最后把重复的书去掉。
               if (bookReview != null)
               {
                   lookup.Reviews.Add(bookReview);
               }

               return lookup;

           }, new { id = id }).Distinct().SingleOrDefault();


            Console.WriteLine(JsonConvert.SerializeObject(b));
        }

        //查询:1--1
        public void test7()
        {
            int id = 3;
            BookReview br;

            //string query = "SELECT * FROM BookReview WHERE id = @id";//demo上的查询有误
            string query = "SELECT * FROM BookReview br LEFT JOIN Book b ON b.Id = br.BookId WHERE br.Id = @id";

            br = conn.Query<BookReview, Book, BookReview>(query,
               (bookReview, book) =>
               {
                   bookReview.AssoicationWithBook = book;
                   return bookReview;
               }, new { id = id }, splitOn: "Content").SingleOrDefault();//}, new { id = id }, splitOn: "Content").SingleOrDefault();

            Console.WriteLine(JsonConvert.SerializeObject(br));
        }

        //事务
        public void test8()
        {
            using (conn)
            {
                conn.Open();//demo又有问题,没有打开连接
                IDbTransaction transaction = conn.BeginTransaction();//开始事务
                try
                {
                    int id = 3;
                    string query = "DELETE FROM Book WHERE id = @id";
                    string query2 = "DELETE FROM BookReview WHERE BookId = @BookId";
                    conn.Execute(query2, new { BookId = id }, transaction, null, null);//注意这里的删除顺序,先删子表,再删主表
                    conn.Execute(query, new { id = id }, transaction, null, null);
                    transaction.Commit();//提交事务
                }
                catch (Exception ex)
                {
                    //出现异常,事务Rollback
                    transaction.Rollback();
                    throw new Exception(ex.Message);
                }
            }
        }

    }



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

}

 

posted @ 2019-07-16 15:19  古兴越  阅读(301)  评论(0编辑  收藏  举报