如何重构重复的 IDbConnection.open\close?

How to refactor repeating IDbConnection.open\close?

也许这是个愚蠢的问题,但我把自己搞糊涂了。 我将 Dapper 与 Autofac (DI) 一起使用,在我的业务层中,我总是使用以下结构:

db.Open(); //db is IDbConnection instance
db.InsertOrDeleteOrUpdate(...)
db.Close();

通过委托方法隐藏db.Open() 和db.Close() 是否是一个好的解决方案?例如:

dbHelper.do(db => db.InsertOrDeleteOrUpdate(...));

遇到这种情况怎么办?

冗余代码不是此代码中的唯一问题。您的代码正在为每个操作访问数据库。如果您的 DBServer 部署在远程计算机上,这将影响性能。参考 this 答案。

你遇到过 UnitOfWork 模式吗?这是处理更高级别连接的非常好的解决方案。

Connection Factory 是另一个不错的选择,它可以与 UnitOfWork 一起使用。但我个人更喜欢 UnitOfWork.

UnitOfWork 的示例代码请参考 this 答案。

从上面选择后,使用"connection per request" 模式很容易减少冗余。您需要确定代码中的集中位置,在哪里创建 DalSession 以及在哪里处置它。