zoukankan      html  css  js  c++  java
  • 开源项目 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}]	"{3}"", Id, BookId, Content);
            }
        }
    
    }
  • 相关阅读:
    Vue.js——vue-router 60分钟快速入门
    史上最全最强SpringMVC详细示例实战教程
    介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术
    iphone导入照片不显示,不同步怎么整
    Unity 3D入门简介
    Vue + Element UI 实现权限管理系统
    Spring Boot + Spring Cloud 构建微服务系统
    linux下文件的复制、移动与删除
    2017年全球AI芯片公司大盘点
    人工智能爆发 中美AI芯片大比拼
  • 原文地址:https://www.cnblogs.com/guxingy/p/11195102.html
Copyright © 2011-2022 走看看