【发布时间】:2022-06-15 16:01:23
【问题描述】:
我正在使用 Dapper 执行一些这样的语句(连接是 NpgsqlConnection):
using var transaction = connection.BeginTransaction();
connection.Execute("INSERT INTO table1(id) VALUES (0);", transaction);
connection.Execute("invalid sql command", transaction);
transaction.Commit();
根据各种 Dapper 教程,我的理解是,在调用 .Commit() 时应该立即提交所有语句,但是在执行第二个语句时我会立即得到一个 NpgsqlException。当我查看数据库时,表是空的,所以第一条语句也没有提交。 Dapper 是否会自动为您提交和回滚事务,因此在使用 Dapper 时是否无需手动调用 .Commit() 和 Rollback()?
【问题讨论】:
-
提交应该是明确的,未提交时自动回滚
-
是否有需要手动回滚的错误示例;即在提交期间而不是之前?
-
一个场景:你执行了一堆语句,然后你发现你不应该这样做并回滚
-
命令立即执行,但结果仅在提交后永久存储 - 这就是您立即收到错误的原因