为什么 Dapper 在执行查询时需要引用事务?
Why does Dapper need a reference to the transaction when executing a query?
刚刚浏览了本教程:https://www.davepaquette.com/archive/2019/02/06/managing-transactions-in-dapper.aspx
我的理解(没有 Dapper)是一旦有了连接,就可以打开一个事务,然后执行一堆语句,然后提交或回滚事务。这些查询不需要引用交易,因为连接已经 'knows' 关于它。
那么为什么 Dapper 每次执行某些操作时都需要交易?
Dapper 不会改变基本 ADO.NET 模型的任何内容,因此,如果您没有明确将交易传递给 Dapper,那么如果您在交易中的操作失败,那么这就是 ADO.NET事情,如果没有 Dapper,相同的操作将以完全相同的方式失败。 Dapper 所做的只是在命令中设置 Transaction
属性。
或者换句话说:我相信你的理解是不正确的。我同意你的看法,尽管你的理解和期望是合理的,但我不知道有任何充分的理由表明该命令甚至需要了解交易,这最终是一个连接问题。但是:我不制定规则:/
请注意,可以在 ADO.NET 中使用“装饰器”模式(例如,mini-profiler 就是这样做的),因此理论上可以创建一个连接包装器来跟踪交易,并让命令检索交易并在执行操作时自动附加它。 如果你从mini-profiler的基本类型开始,这可能没什么工作。
刚刚浏览了本教程:https://www.davepaquette.com/archive/2019/02/06/managing-transactions-in-dapper.aspx
我的理解(没有 Dapper)是一旦有了连接,就可以打开一个事务,然后执行一堆语句,然后提交或回滚事务。这些查询不需要引用交易,因为连接已经 'knows' 关于它。
那么为什么 Dapper 每次执行某些操作时都需要交易?
Dapper 不会改变基本 ADO.NET 模型的任何内容,因此,如果您没有明确将交易传递给 Dapper,那么如果您在交易中的操作失败,那么这就是 ADO.NET事情,如果没有 Dapper,相同的操作将以完全相同的方式失败。 Dapper 所做的只是在命令中设置 Transaction
属性。
或者换句话说:我相信你的理解是不正确的。我同意你的看法,尽管你的理解和期望是合理的,但我不知道有任何充分的理由表明该命令甚至需要了解交易,这最终是一个连接问题。但是:我不制定规则:/
请注意,可以在 ADO.NET 中使用“装饰器”模式(例如,mini-profiler 就是这样做的),因此理论上可以创建一个连接包装器来跟踪交易,并让命令检索交易并在执行操作时自动附加它。 如果你从mini-profiler的基本类型开始,这可能没什么工作。