相关疑难解决方法(0)

使用SqlConnection/System.Transactions进行Session-Per-Request

我刚刚开始使用Dapper进行一个项目,过去几年大多使用像NHibernate和EF这样的ORM.

通常在我们的Web应用程序中,我们按请求实现会话,在请求开始时开始事务并在结束时提交它.

我们应该在直接使用SqlConnection/System.Transactions时做类似的事情吗?

StackOverflow如何做到这一点?

根据@gbn和@Sam Safron的建议,我没有使用交易.在我的情况下,我只是在进行读取查询,因此似乎没有真正的要求使用事务(与我所知道的隐式事务相反).

我创建了一个轻量级的会话接口,以便每个请求都可以使用一个连接.这对我来说非常有益,因为对于Dapper我经常需要创建一些不同的查询来构建一个对象,而宁愿共享相同的连接.

确定每个请求的连接并处理它的工作是由我的IoC容器(StructureMap)完成的:

public interface ISession : IDisposable {
    IDbConnection Connection { get; }
}

public class DbSession : ISession {

    private static readonly object @lock = new object();
    private readonly ILogger logger;
    private readonly string connectionString;
    private IDbConnection cn;

    public DbSession(string connectionString, ILogger logger) {
        this.connectionString = connectionString;
        this.logger = logger;
    }

    public IDbConnection Connection { get { return GetConnection(); } }

    private IDbConnection GetConnection() {
        if (cn == null) {
            lock (@lock) …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlconnection system.transactions dapper

15
推荐指数
1
解决办法
1962
查看次数

即使未调用System.Transactions.TransactionScope.Commit(),也会提交数据

在什么情况下代码可以包含在System.Transactions.TransactionScope仍然提交中,即使抛出异常并且最外层范围从未调用过提交?

包含一个顶级方法using (var tx = new TransactionScope()),并调用也TransactionScope以相同方式使用的方法.

我正在使用带有关联tableadapters的类型化数据集.可能是因为某些原因,适配器中的命令没有出现?你们中的任何人都知道如何检查他们是否在环境TransactionScope中加入?

.net c# transactions transactionscope

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