Dapper结合Repository模式的应用
Dapper在真实项目中使用,扩展IDbConnection的功能,支持Oracle、MS SQL Server 2005数据库
1)定义统一的IDbConnection访问入口
- public class Database
- {
- /// 得到web.config里配置项的数据库连接字符串。
- private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
- /// 得到工厂提供器类型
- private static readonly string ProviderFactoryString = ConfigurationManager.AppSettings["DBProvider"].ToString();
- private static DbProviderFactory df = null;
- /// <summary>
- /// 创建工厂提供器并且
- /// </summary>
- public static IDbConnection DbService()
- {
- if (df == null)
- df = DbProviderFactories.GetFactory(ProviderFactoryString);
- var connection = df.CreateConnection();
- connection.ConnectionString = ConnectionString;
- connection.Open();
- return connection;
- }
- }
2)app.config配置
- <?xml version="1.0"?>
- <configuration>
- <configSections>
- </configSections>
- <appSettings>
- <add key="DBProvider" value="System.Data.SqlClient"/>
- </appSettings>
- <connectionStrings>
- <add name="ConnectionString" connectionString="Data Source=.;Initial Catalog=PlanDb;User ID=sa;Password=manager;" providerName="System.Data.SqlClient" />
- </connectionStrings>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
- </startup>
- </configuration>
3)Repository模式实现
- /// <summary>
- /// 产品管理
- /// </summary>
- public class ProductRepository
- {
- public static Product GetById(int id)
- {
- var sqlstr = "select * from dbo.Product where Product_ID=@id";
- using (var conn = Database.DbService())
- {
- return conn.Query<Product>(sqlstr, new { id }).Single();
- }
- }
- public static List<Product> GetByPid(int pid)
- {
- var sqlstr = "select * from dbo.Product where Parent_ID=@pid order by Product_no";
- using (var conn = Database.DbService())
- {
- return conn.Query<Product>(sqlstr, new { pid }).ToList();
- }
- }
- /// <summary>
- /// 获取所有产品--机型
- /// </summary>
- /// <returns></returns>
- public static List<Product> GetAllTop()
- {
- var sqlstr = "select * from dbo.Product where Parent_ID=0 order by Product_no";
- using (var conn = Database.DbService())
- {
- return conn.Query<Product>(sqlstr).ToList();
- }
- }
- public static void Insert(Product model)
- {
- if (model.Product_ID == 0)
- model.Product_ID = NextId;
- string sqlstr = "INSERT INTO dbo.Product" +
- "(Product_ID, Parent_ID, Product_No, Product_Name, Product_Type, Remark, Creater, Create_Date, Data_Availability) " +
- "values(@Product_ID,@Parent_ID,@Product_No,@Product_Name,@Product_Type,@Remark,@Creater,@Create_Date,@Data_Availability)";
- using (var conn = Database.DbService())
- {
- conn.Execute(sqlstr, model);
- }
- }
- public static void Delete(int id)
- {
- var sqlstr = "delete from dbo.Product where Product_ID=@id";
- using (var conn = Database.DbService())
- {
- conn.Execute(sqlstr, new { id });
- }
- }
- public static void Update(Product model)
- {
- string sqlstr = "UPDATE dbo.Product " +
- "SET Product_No = @Product_No," +
- " Product_Name = @Product_Name, " +
- " Product_Type = @Product_Type, " +
- " Remark = @Remark" +
- " WHERE Product_ID = @Product_ID";
- using (var conn = Database.DbService())
- {
- conn.Execute(sqlstr, model);
- }
- }
- /// <summary>
- /// 下一个ID
- /// </summary>
- public static int NextId
- {
- get
- {
- return Database.NextId("Product");
- }
- }
- public static bool Exists(string no)
- {
- var sqlstr = "select count(*) from dbo.Product where Product_No=@no";
- using (var conn = Database.DbService())
- {
- return conn.Query<int>(sqlstr, new { no }).Single() > 0;
- }
- }
- }
http://blog.csdn.net/dacong 转载请注明出处
- public class Product
- {
- #region Fields
- private int _product_id;
- private int _parent_id;
- private string _product_no = "";
- private string _product_name = "";
- private string _product_type = "";
- private string _remark = "";
- private string _creater = "";
- private DateTime _create_date;
- private string _data_availability = "";
- #endregion
- public Product()
- {
- _parent_id = 0;
- _data_availability = "Y";
- }
- #region Public Properties
- public int Product_ID
- {
- get { return _product_id; }
- set
- {
- _product_id = value;
- }
- }
- /// <summary>
- /// 父产品ID,0为最顶层产品
- /// </summary>
- public int Parent_ID
- {
- get { return _parent_id; }
- set
- {
- _parent_id = value;
- }
- }
- public string Product_No
- {
- get { return _product_no; }
- set
- {
- _product_no = value;
- }
- }
- public string Product_Name
- {
- get { return _product_name; }
- set
- {
- _product_name = value;
- }
- }
- public string Product_Type
- {
- get { return _product_type; }
- set
- {
- _product_type = value;
- }
- }
- public string Remark
- {
- get { return _remark; }
- set
- {
- _remark = value;
- }
- }
- public string Creater
- {
- get { return _creater; }
- set
- {
- _creater = value;
- }
- }
- public DateTime Create_Date
- {
- get { return _create_date; }
- set
- {
- _create_date = value;
- }
- }
- public string Data_Availability
- {
- get { return _data_availability; }
- set
- {
- _data_availability = value;
- }
- }
- #endregion
- }
Dapper结合Repository模式的应用的更多相关文章
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- Dapper and Repository Pattern in MVC
大家好,首先原谅我标题是英文的,因为我想不出好的中文标题. 这里我个人写了一个Dapper.net 的Repository模式的底层基础框架. 涉及内容: Dapper.net结合Repository ...
- 分享基于Entity Framework的Repository模式设计(附源码)
关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...
- 关于MVC EF架构及Repository模式的一点心得
一直都想写博客,可惜真的太懒了或者对自己的描述水平不太自信,所以...一直都是不想写的状态,关于领域驱动的东西看了不少,但是由于自己水平太差加上工作中实在用不到,所以一直处于搁置状态,最近心血来潮突然 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的.它位于映射层 ...
- (转)MVC中的Repository模式
1.首先创建一个空的MVC3应用程序,命名为MyRepository.Web,解决方案命名为MyRepository. 2.添加一个类库项目,命名为MyRepository.DAL,添加一个文件夹命名 ...
- 关于Repository模式
定义(来自Martin Fowler的<企业应用架构模式>): Mediates between the domain and data mapping layers using a co ...
- 探究Repository模式的两种写法与疑惑
现如今DDD越来越流行,园子里漫天都是介绍关于它的文章.说到DDD就不能不提Repository模式了,有的地方也叫它仓储模式. 很多时候我们对Repository都还停留在Copy然后使用的阶段, ...
- LCLFramework框架之Repository模式
Respository模式在示例中的实际目的小结一下 Repository模式是架构模式,在设计架构时,才有参考价值: Repository模式主要是封装数据查询和存储逻辑: Repository模式 ...
随机推荐
- Centos7 配置和链接FTP
1:安装vsftpd组建: yum -y install vsftpd 安装完成以后在目录/etc/vsftpd/vsftpd.conf文件是vsftp的配置文件 2:添加一个专门用来登陆vsft ...
- 量化交易之下单函数和context对象
一.下单函数 聚宽设计的函数(如前文所说准确叫法是API)的用法都写在API文档里,位置在聚宽网站导航栏-帮助-API文档 1.order按股数下单 order(security, amount, s ...
- com.android.support:appcompat-v7:27.+问题解决
新建的项目就报下面的错误,问题指向了app/build.gradle,看起来是版本兼容的问题. 解决方案: 1.查看sdk tools的版本:26.1.1 远程依赖包是27.+,而我们的s ...
- 20175209 《Java程序设计》第五周学习总结
20175209 <Java程序设计>第五周学习总结 一.教材知识点总结 1.接口的定义 接口声明:关键字interface 接口体:public static final 修饰常量,pu ...
- HDU 5984(求木棒切割期望 数学)
题意是给定一长为 L 的木棒,每次任意切去一部分直到剩余部分的长度不超过 D,求切割次数的期望. 若木棒初始长度不超过 D,则期望是 0.000000: 设切割长度为 X 的木棒切割次数的期望是 F( ...
- 第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。
一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程.线程等待.线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的 ...
- 第一节:框架前期准备篇之Log4Net日志详解
一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库.t ...
- JGUI源码:鼠标中键滚动再次优化(5)
//电脑端中键滚动事件 var mousewheel = getBrowserInfo() == "Firefox" ? "DOMMouseScroll" : ...
- ArcGis汇总篇
ArcGis-javascript-API下载 bigemap.太乐地图 可下载地图文件 用arcgis for js 可以河流流域水质图 ArcGis导出shp文件(dbf.prj.sbn.sbx. ...
- 【汇总目录】Java
疯狂Java学习笔记 [2019年03月20日] Lambda表达式与函数式接口 [2019年03月20日] Lambda表达式概念与基本语法 [2019年03月18日] 内部类 [2019年02月1 ...