小编Kri*_*ana的帖子

使用BeginTransaction和Dapper.IDbConnection的正确方法

这是使用的正确方法是BeginTransaction()IDbConnection在小巧玲珑的?

我创建了一个必须使用的方法BeginTransaction().这是代码.

using (IDbConnection cn = DBConnection)
{
    var oTransaction = cn.BeginTransaction();

    try
    {
        // SAVE BASIC CONSULT DETAIL
        var oPara = new DynamicParameters();
        oPara.Add("@PatientID", iPatientID, dbType: DbType.Int32);
        ..........blah......blah............
    }
    catch (Exception ex)
    {
        oTransaction.Rollback();
        return new SaveResponse { Success = false, ResponseString = ex.Message };
    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的方法 - 我有一个例外 -

操作无效.连接已关闭.

这是因为在打开连接之前无法开始事务.所以当我添加这一行:时cn.Open();,错误得到解决.但我已经读过某个地方,手动打开连接是不好的做法!! Dapper仅在需要时才打开连接.

在Entity框架中,您可以使用a处理事务TransactionScope.

所以我的问题是cn.Open()...在没有在Dapper中添加行来处理事务的好习惯是什么?我想应该有一些正确的方法.

.net c# orm idbconnection dapper

25
推荐指数
2
解决办法
3万
查看次数

postgres中是否有任何等效的sp_help

在SQL Server中,如果我这样写命令-

EXEC SP_HELP EmployeeMaster

它将返回我的表格字段以及在其上定义的所有默认约束。现在我只想知道在上面的postgres中有什么命令吗?

虽然我知道在postgres中仅获取表字段,但是您可以使用以下查询。

select column_name from information_schema.columns where table_name = 'EmployeeMaster'
Run Code Online (Sandbox Code Playgroud)

sql database postgresql

5
推荐指数
1
解决办法
3361
查看次数

在Dapper SqlBuilder或sp_exectuesql中运行SET语句

我正在尝试使用来在Dapper中设置事务隔离级别SqlBuilder,但似乎没有用。

var builder = new SqlBuilder();
var sqlStatement = builder.AddTemplate(@"
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    SELECT * FROM Users
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
conn.Query<User>(sqlStatement.RawSql);
Run Code Online (Sandbox Code Playgroud)

但这有效:

conn.Execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
var result = conn.Query<User>(sqlStatement);
conn.Execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
Run Code Online (Sandbox Code Playgroud)

我想这可能是因为使用SqlBuilderDapper构建了动态SQL并使用sp_executesql存储过程执行了。

为了证明我的假设,我尝试了以下SQL语句:

exec sp_executesql N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'
Run Code Online (Sandbox Code Playgroud)

该语句之后,我查询sys.dm_exec_sessions检查我的连接,它仍然显示ReadCommitted数据库中的默认隔离级别。

有什么办法可以SET在单独的地方设置交易级别(或任何其他语句).Execute?或者,也许是一种特殊的使用SET语句的方式sp_executesql

sql sql-server isolation-level dapper

5
推荐指数
1
解决办法
506
查看次数