.Net Core - 使用事务IDbtransaction操作DBData
New一个流程
- 获取数据库连接字符串,实例化SqlConnection
- 打来数据库连接
- Begin当前连接的事务(IDbTransaction)
- 操作数据库(操作数据库的时候一定要使用当前连接和事务修改数据)
- 符合预期Commit,不符合预期Rollback
- 关闭数据库连接
1.获取连接字符串
一般连接字符串的配置会放在appsetting.json文件中
{ "ConnectionStrings": { // "DbConn": "Server=Servername;Integrated Security=no;User ID=account;PWD=pwd;initial catalog=DBname;MultipleActiveResultSets=true;Max Pool Size=1024;Min Pool Size=10;Pooling=true;" } }
可以直接在startup.cs的服务配置中直接获取配置信息
public class Startup { public Startup(IConfiguration configuration) //依赖注入 { _configuration = configuration; } public IConfiguration _configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { string _conn; try { //获取连接字符串配置信息 _conn = _configuration.GetConnectionString("DBConn"); } catch (Exception ex) { throw new Exception($"Database connection initialization failed: {ex.Message}{ex.StackTrace}"); } //将获取的信息配置到Appconfigurer.cs文件中 AppConfigurer.Config(_conn); }
在AppConfigurer.cs文件中创建一个静态类AppConfigurer
public static class AppConfigurer { public static string _DbStr = string.Empty; //初始化SqlConnection信息 public static SqlConnection DbConnection => new SqlConnection(_DbStr); public static void Config(string strConn) //这个方法会在项目启动文件的服务配置中调用 { if (string.IsNullOrEmpty(strConn)) throw new Exception("AppConfigurer.Config :: Invalid parameter"); _DbStr = strConn; RefreshConfig(); //这个方法内可以初始化各种配置信息 } }
2.使用IDntransaction(事务)
public static void UseTransTest() { var tempConn= AppConfigurer.DbConnection; //这里因为在配置文件中实例过SqlConnection 所以可以直接调用SqlConnection的Open方法 //否则需要 var tempConn=new SqlConnection(_connString); tempConn.Open(); //事务直指定打开的连接 IDbTransaction trans = tempConn.BeginTransaction(); //开启连接的事务 try { InsertOM.Create(tempConn, request,trans);//需要把SqlConnection实例和IDbTransaction实例传入ORM对DB的操作 //执行完所有的DB操作没有出错就提交事务 trans.Commit(); } catch (Exception ex) { trans.Rollback(); } finally { if (tempConn.State != ConnectionState.Closed) tempConn.Close(); //事务执行完要关闭连接 } }