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 = ;
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 = ;
conn.Execute(query, book); int id = ;
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 = ;
var book = conn.Query<Book>(query, new { id = id }).SingleOrDefault();
Console.WriteLine(JsonConvert.SerializeObject(book));
} //查询:1--n
public void test6()
{
int id = ; //查询图书时,同时查找对应的书评,并存在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 = ;
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 = ;
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);
}
} }

开源项目 05 Dapper的更多相关文章

  1. .NET Core/.NET5/.NET6 开源项目汇总1:常用必备组件

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  2. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  3. 【目录】本博客其他.NET开源项目文章目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.本博客其他.NET开源项目文章目录 37..NET平台开源项目速览(17)FluentConsole让你的控制台酷起来 36..NET平 ...

  4. .NET平台开源项目速览(1)SharpConfig配置文件读写组件

    在.NET平台日常开发中,读取配置文件是一个很常见的需求.以前都是使用System.Configuration.ConfigurationSettings来操作,这个说实话,搞起来比较费劲.不知道大家 ...

  5. 收集常用的.net开源项目

    Json.NET http://json.codeplex.com/ Json.NET是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Lin ...

  6. [转] Android优秀开源项目

    Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习.今天爬爬把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助.另外, ...

  7. .Net 开源项目资源大全

    伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 ...

  8. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

  9. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

随机推荐

  1. 解决fiddler不能抓取firefox浏览器包的问题(转)

    转自:https://blog.csdn.net/jimmyandrushking/article/details/80819103

  2. idea中的调试按键(f5,f6,f7,f8,f9)

    f5: 如果断点处存在方法,f5 则强制进入方法内部,然后一步一步执行方法体, 如果再遇到方法,则继续进入方法体,如此循环,直到执行到断点开始处: f6: 从断点处一步步执行以后的代码,会跳出断点所在 ...

  3. C# -- 高性能RPC框架:Socean.RPC

    简介 Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能.高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长 ...

  4. map小列

    // 有关学生信息的头文件student.h代码如下 #include #include using namespace std; struct Student                    ...

  5. 【开发笔记】- 安装Git命令

    1.查看linux版本信息: $ cat /etc/redhat-release 2.输入命令安装git: $ yum install git 3.等待下载,自动安装完毕,查看git版本 $ git ...

  6. 【MFC】在CHtmlView中在同一窗口显示新打开页面

    使用MFC的单文档,用IE核心做的简单浏览器.当打开一个新的链接时,IE核心会使用IE来打开一个新窗口显示打开的新页面.为了让新页面在本程序中显示,我试了如下方法,其中的问题一并列出: 方法1.重载C ...

  7. Joomla漏洞复现

    漏洞环境及利用 Joomla 3.4.6 : https://downloads.joomla.org/it/cms/joomla3/3-4-6 PHP 版本: 5.5.38 Joomla 3.4 之 ...

  8. 存储管理器 S3C2440A

    CPU通过存储管理器来控制外部设备 SDRAM存储结构 S3C2440A内存控制器 原理图 HY57V561620(L)T 4Banks x 4M x 16Bit Synchronous DRAM S ...

  9. Spring 实战 第4版 读书笔记

    第一部分:Spring的核心 1.第一章:Spring之旅 1.1.简化Java开发 创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB.相对EJB来说,Spring提供 ...

  10. 【转载】TX - row lock contention 的一些场景

    TX - row lock contention 的一些场景 原创 2016-07-11 易欣 云和恩墨 易欣(Eson) 云和恩墨技术专家 本文整理来自7月7日周四晚云和恩墨大讲堂嘉宾易欣分享的主题 ...