如何管理 ASP.Net 应用程序中的数据库连接?
我的理解告诉我“最好”的方法是打开连接,进行查询,关闭连接 - 并多次执行此操作,因为连接池使成本可以忽略不计。
当我有一个 DAL 时,问题就出现了,其中每个方法都管理自己的连接。例如。
User x = DAL.GetUserDetails();
Customer y = DAL.GetCustomer();
这很好,直到我们开始讨论 TransactionScope
using (TransactionScope t....
{
DAL.UpdateCustomer(y);
DAL.UpdateUser(x);
t.Complete();
}
ASP.Net 现在想要使用 DTC,因为(我猜测)涉及多个连接。
有人会说“在某处缓存连接”,但由于我管理安全性的方式(执行为/恢复),我需要显式地销毁连接,并且我不想在每个页面上进行调用因为有人会忘记打电话。我还可以将连接传递到每个方法中,但这并不理想,因为页面必须管理连接。
我说得有道理还是我错过了一些基本的东西?
我在某处读到,我不记得微软将在哪里解决这个问题,当你有两个连接到同一个数据库时,它们不会升级到 DTC,这将使这个问题消失。
在此之前,我们所做的是开发 TransactionScope,然后我们的 DAL 会向 TS 请求新连接,当我们处置 TS 时,它会关闭连接。
连接存储在 LogicalCallContext 中,尽管我会考虑使用 HTTP Context。我在应用程序上线之前离开了公司,但据我所知,他们没有遇到任何问题。
所以你会有
using (CustomTS.New())
{
CustomerDal.Update()
userDal.Update()
}
CustomTS 有一个静态方法可以获取当前事务和连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)