博客
关于我
Dapper连接Oracle
阅读量:737 次
发布时间:2019-03-22

本文共 7946 字,大约阅读时间需要 26 分钟。

Dapper与Oracle开发实践

去年曾写过一篇《让Dapper支持Oracle》,回想起来,现在感到无地自容。这篇文章的初衷虽好,但却因当时技术水平的欠缺和信息查阅不够全面而犯了错误。如今经历了一段时间的学习和实践,终于明白了Dapper其实本身就支持Oracle,只是当时的理解和资源利用存在不足。现在将一份新的示例代码分享出来,希望能为开发者提供一些帮助。

数据库连接配置

首先,需要配置Oracle数据库连接。以下是标准代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using Dapper;
using System.Data.OracleClient;
using System.Data;
public class DapperFactory
{
public static readonly string connection string = System.Configuration.ConfigurationManager.ConnectionStrings["Wip_TestConnStr"].ToString();
public static OracleConnection CreateOracleConnection()
{
var connection = new OracleConnection(connectionString);
connection.Open();
return connection;
}
}

简要说明:上述代码通过读取配置文件中的数据库连接字符串,建立了一个Oracle连接。CreateOracleConnection 方法负责连接数据库并返回一个OracleConnection 实例。

数据库操作

基于Oracle数据库,本文将展示增删改查(CRUD)操作的实现,包括事务处理和分页功能。以下是具体实现代码:

public class WUFEI_TESTTBRepository
{
public bool AddWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"INSERT INTO WUFEI_TESTTB
(USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK)
VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK)";
return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
}
}
public int AddWUFEI_TestTbByTrans(List
list)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
var transaction = conn.BeginTransaction();
int row = 0;
foreach (var item in list)
{
string executeSql = @"INSERT INTO WUFEI_TESTTB
(USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK)
VALUES (:USER_ID, :USER_NAME, :USER_ADDRESS, :USER_SEX, :USER_BIRTHDAY, :USER_REMARK)";
row += conn.Execute(executeSql, item, transaction, null, null);
}
transaction.Commit();
return row;
}
}
public bool DeleteWUFEI_TESTTB(int USER_ID)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"DELETE FROM WUFEI_TESTTB WHERE USER_ID = :USER_ID";
var condition = new { USER_ID = USER_ID };
return conn.Execute(executeSql, condition) > 0 ? true : false;
}
}
public bool EditWUFEI_TESTTB(WUFEI_TESTTBModel wufei_testtb)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"UPDATE WUFEI_TESTTB SET
USER_NAME = :USER_NAME,
USER_ADDRESS = :USER_ADDRESS,
USER_SEX = :USER_SEX,
USER_BIRTHDAY = :USER_BIRTHDAY,
USER_REMARK = :USER_REMARK
WHERE USER_ID = :USER_ID";
return conn.Execute(executeSql, wufei_testtb) > 0 ? true : false;
}
}
public bool UpdateWUFEI_TESTTB(string sqlStr)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
return conn.Execute(sqlStr) > 0 ? true : false;
}
}
public WUFEI_TESTTBModel GetWUFEI_TESTTB(Decimal USER_ID)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeSql = @"SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK
FROM WUFEI_TESTTB
WHERE USER_ID = :USER_ID";
var condition = new { USER_ID = USER_ID };
return conn.Query
(executeSql, condition).SingleOrDefault();
}
}
public KeyValuePair
> WUFEI_TESTTBPaginationA(Pagination pagin, WUFEI_TESTTBModel condition)
{
using (OracleConnection conn = DapperFactory.CreateOracleConnection())
{
string executeQuery = String.Format(@"SELECT * FROM (
SELECT table_source.*, ROWNUM AS rowno
FROM (
SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK
FROM WUFEI_TESTTB
WHERE 1 = 1 {0}
) table_source
WHERE ROWNUM <= ({1} * {2})
) table_alias
WHERE table_alias.rowno > ((({1} - 1) * {2}) + 1)", pagin.CurrentPageIndex, pagin.PageSize, conditionStr);
string executeCount = String.Format("SELECT COUNT(1) AS CountNum FROM WUFEI_TESTTB WHERE 1 = 1 {0}", conditionStr);
var mixCondition = new { CurrentPageIndex = pagin.CurrentPageIndex, PageSize = pagin.PageSize };
var listScore = conn.Query
(executeQuery, mixCondition).ToList();
pagin.TotalItemCount = conn.Query
(executeCount, mixCondition).SingleOrDefault();
return new KeyValuePair
>(pagin, listScore); } } public KeyValuePair
> WUFEI_TESTTBPagination(Pagination pagin, WUFEI_TESTTBModel condition) { using (OracleConnection conn = DapperFactory.CreateOracleConnection()) { string conditionStr = ""; string orderBy = "USER_ID DESC"; if (!string.IsNullOrEmpty(pagin.OrderBy)) { orderBy = pagin.OrderBy; } string executeQuery = String.Format(@"SELECT * FROM ( SELECT table_source.*, ROWNUM AS rowno FROM ( SELECT USER_ID, USER_NAME, USER_ADDRESS, USER_SEX, USER_BIRTHDAY, USER_REMARK FROM WUFEI_TESTTB WHERE 1 = 1 {0} ) table_source WHERE ROWNUM <= ({1} * {2}) ) table_alias WHERE table_alias.rowno > ((({1} - 1) * {2}) + 1)", conditionStr, orderBy); string executeCount = String.Format("SELECT COUNT(*) AS CountNum FROM WUFEI_TESTTB WHERE 1 = 1 {0}", conditionStr); var mixCondition = new { CurrentPageIndex = pagin.CurrentPageIndex, PageSize = pagin.PageSize }; var listScore = conn.Query
(executeQuery, mixCondition).ToList(); pagin.TotalItemCount = conn.Query
(executeCount, mixCondition).SingleOrDefault(); return new KeyValuePair
>(pagin, listScore); } } }

实体类模型

以下是与数据库表对应的实体类模型:

using System;
using System.Data;
using System.Collections;
using System.Xml;
using System.Runtime.Serialization;
namespace Tcl.ForLog.Model
{
[DataContract(Name = "WUFEI_TESTTB")]
public class WUFEI_TESTTBModel
{
public const string TABLE_NAME = "WUFEI_TESTTB";
[DataMember(Name = "USER_ID")]
public decimal USER_ID { get; set; }
[DataMember(Name = "USER_NAME")]
public string USER_NAME { get; set; }
[DataMember(Name = "USER_ADDRESS")]
public string USER_ADDRESS { get; set; }
[DataMember(Name = "USER_SEX")]
public string USER_SEX { get; set; }
[DataMember(Name = "USER_BIRTHDAY")]
public DateTime USER_BIRTHDAY { get; set; }
[DataMember(Name = "USER_REMARK")]
public string USER_REMARK { get; set; }
public static WUFEI_TESTTBModel DeepCopy(WUFEI_TESTTBModel testTbA)
{
var testTbB = new WUFEI_TESTTBModel();
testTbB.USER_ID = testTbA.USER_ID;
testTbB.USER_NAME = testTbA.USER_NAME;
testTbB.USER_ADDRESS = testTbA.USER_ADDRESS;
testTbB.USER_SEX = testTbA.USER_SEX;
testTbB.USER_BIRTHDAY = testTbA.USER_BIRTHDAY;
testTbB.USER_REMARK = testTbA.USER_REMARK;
return testTbB;
}
}
}

技术说明

以上代码以WUFEI_TESTTB表为例,展示了基于Dapper的Oracle数据库开发实践。通过上述代码,可以完成用户数据的增删改查操作,同时支持事务处理和分页功能。WUFEI_TESTTBModel类则是对应的实体类模型,用于数据传输和处理。

代码生成工具

需要注意的是,本文中的代码主要通过CodeSmith生成,这是一种强大的代码生成工具,能够显著提升开发效率。如果本文的内容对您有所帮助,请记得推荐和分享。

转载声明

转载自:https://www.cnblogs.com/ushou/p/3359973.html

你可能感兴趣的文章
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>