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. yii框架中的各种小问题

    1.默认路径的修改 2.分页的做法

  2. C# 简单的定时器使用

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  3. C# vb .net实现透明特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的透明效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  4. 认识KNX协议

    一.简介 KNX是Konnex的缩写.1999年5月,欧洲三大总线协议EIB.BatiBus和EHSA合并成立了Konnex协会,提出了KNX协议.该协议以EIB为基础,兼顾了BatiBus和EHSA ...

  5. 已知IP地址算子网掩码

    子网掩码计算方法有两种: 方法一:利用子网数来计算: 1.首先,将子网数目从十进制数转化为二进制数: 2.接着,统计得到的二进制数的位数,设为N: 3.最后,先求出此IP地址对应的地址类别的子网掩码. ...

  6. 车间管理难?APS系统为你智能排程

    对 APS系统不熟或者不了解他的一些运行规则也是在实施项目中导致经常不能正常运行不可忽视的因素,对 APS系统的早期了解是整个项目实施运行的成功至关重要的因素. 如果不了解 APS潜在的因素和运行准则 ...

  7. vue中使用echart柱状图

    一: <template> <Layout> <Content> <Card :style="{minHeight:'300px'}"&g ...

  8. Oracle UNDO块

    过程:开始一个事务--通过事务信息找到UNDO块头的所在的段名及数据文件号等--转储UNDO header--在事务表中对应槽位找到前镜像dba--转储数据块--找到对应记录得到bdba--转储数据块 ...

  9. 04-JavaScript的操作

    本篇主要介绍获取元素的方法.操作元素.数组和字符串的操作方法.定时器和封闭函数.以及贪吃蛇案例: 一.获取元素的方法 1.document.getElementById:可以使用内置对象documen ...

  10. Seata 动态配置订阅与降级实现原理

    Seata 的动态降级需要结合配置中心的动态配置订阅功能.动态配置订阅,即通过配置中心监听订阅,根据需要读取已更新的缓存值,ZK.Apollo.Nacos 等第三方配置中心都有现成的监听器可实现动态刷 ...