江西彩铃网,黑子的篮球extra game,矢野奈美子
介绍
不知道大家在用dapper
的时候sql语句是写到哪的,目前看网上的例子都是写到类里面的.
此项目的目的是把sql语句放到文件(xml)中
目前只是初步版本,只是说明了意图,后面会持续完善和优化
功能说明
一起看看如何使用
首先我们需要一个xml文件,如下:
<?xml version="1.0" encoding="utf-8" ?> <sql xmlns="http://schema.zoey.com/sql" domain="default"> <sql-query name="student.getstudentbyid"> <text> <![cdata[ select * from student where id = @id ]]> </text> </sql-query> <sql-command name="student.updatestudentbyid"> <text> <![cdata[ update student set age = @age,name = @name where id = @id ]]> </text> </sql-command> </sql>
这里我们看下面几点:
sql
节点上的domain
属性.这里是指定数据库的连接字符串,后面会详细说明sql-query
和sql-command
节点来判断的name
属性目前是所有文件都不能重复在startup
中的configureservices
添加如下代码:
//sql文件的读取和监视依赖 ifileprovider var physicalprovider = _env.contentrootfileprovider; services.addsingleton<ifileprovider>(physicalprovider); services.addzoeydappercore(options => { //sql文件夹的路径 支持多个文件夹 options.path = new list<string>() { "/config" }; //监控文件的后缀(默认未 *.*) options.watchfilefilter = "*.xml"; //该属性暂时没用 options.startproxy = false; }) //添加mssqlserver //这里说明一下 该方法是非必要的,下面会说 .addmssqlserver(option => { //添加数据库连接字符串 //这里为什么没用配置文件读取,考虑到可能用到(secret manager) //后面可以提供直接从配置文件中读取 option.databaseelements = new list<databaseelement>() { //参数1:唯一名称 //参数2:连接字符串 new databaseelement("testdb","data source=.;initial catalog=test;integrated security=true") }; //此处就是上面提到的 domain 节点 //每个domain对象有个唯一名称(xml文件domain的节点) //每个domain对象都有 master(主库) 和 slave(从库) 的名称(上面配置信息的名称) option.domainelements = new list<domainelement>() { new domainelement() { //xml文件domain节点的名称 name = "default", //主库和从库的名称(上面配置信息的名称) //主库和从库可配多个(负载均衡算法暂没实现) masterslaves = new masterslaves("testdb","testdb") } }; });
说明:
用的时候有两种方式.
当我们没调用addmssqlserver
时,在controller
中:
public class homecontroller : controller { //注入isqlcontext private readonly isqlcontext _sqlcontext; public homecontroller(isqlcontext sqlcontext) { this._sqlcontext = sqlcontext; } public iactionresult index() { list<student> student; //获取 student.getstudentbyid sql信息 var sql = _sqlcontext.getsqlelement("student.getstudentbyid"); using (var db = new sqlconnection("data source=.;initial catalog=test;integrated security=true")) { student = db.query<student>(sql.commandtext, new { id = 1 }); } return view(student); } public iactionresult about() { //获取 student.getstudentbyid sql信息 var sql = _sqlcontext.getsqlelement("student.updatestudentbyid"); using (var db = new sqlconnection("data source=.;initial catalog=test;integrated security=true")) { db.execute(sql.commandtext, new { age = new random().next(100), name = "hello zoey!", id = 1 }); } return view(); } }
说明:此种方法只是单纯的获取sql
信息,没什么特别的.
下面我们看第二种:
public class homecontroller : controller { //注入 isqlcommand private readonly isqlcommand _sqlcommand; public homecontroller(isqlcommand sqlcommand) { _sqlcommand = sqlcommand; } public iactionresult index() { //此处直接执行 query 方法 var student = _sqlcommand.getsqlelement("student.getstudentbyid").query<student>(new { id = 1 }); return view(student); } }
说明:
startup
中调用addmssqlserver
方法结尾
该项目还是开始阶段,只是个雏形,包括文件的命名都可能是不规范的.希望大家多给意见和建议.
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论