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. python_操作linux上的mysql

    在编写初期,遇见一个问题,发现怎么连接不上mysql,一直报错1045: 最后发现,只要下面的,连接写正确,不会出现这个问题, 只要你保证你的user.pwd是正确的, import pymysqld ...

  2. 【题解】Luogu P5279 [ZJOI2019]麻将

    原题传送门 希望这题不会让你对麻将的热爱消失殆尽 我们珂以统计每种牌出现的次数,不需要统计是第几张牌 判一副牌能不能和,类似这道题 对于这题: 设\(f[i][j][k][0/1]\)表示前\(i\) ...

  3. 解决h5版的uniapp请求跨域问题

    uni项目里有个名为manifest.json文件 编辑manifest.json文件,找到h5选项,里面一般有个名为“devServer”索引,往这个索引中添加一个“proxy”或者编辑,值为请求域 ...

  4. java之mybatis之helloworld

    1. MyBatis 是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架. MyBatis几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果. MyBatis几乎能够 ...

  5. C#基础—数组

    C#基础之数组 1.   数组的定义与初始化 一维数组: (1)            int [] A = new int[4]{ 0,1,2,3}; (2)            int[] B ...

  6. 1014 福尔摩斯的约会(C#)

    一.题目内容: 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就 ...

  7. poi读取excel的列和删除列

    (各自根据具体的poi版本进行相应的替换即可) package com.br.loan.strategy.common.utils; import lombok.extern.slf4j.Slf4j; ...

  8. pandas-09 pd.groupby()的用法

    pandas-09 pd.groupby()的用法 在pandas中的groupby和在sql语句中的groupby有异曲同工之妙,不过也难怪,毕竟关系数据库中的存放数据的结构也是一张大表罢了,与da ...

  9. Android常用优秀开源框架整理

    前言 AOSF:全称为Android Open Source Framework,即Android优秀开源框架汇总.包含:网络请求okhttp,图片下载glide,数据库greenDAO,链式框架Rx ...

  10. prometheus-redis-exporter监控redis

    chart地址:https://github.com/helm/charts/tree/master/stable/prometheus-redis-exporter 1.下载chart包 $ hel ...