使用linq2sql访问数据库时,我创建了一个新的DataContext。据我所知,底层的DBConnection是池化的,可以重用。
using (var dc = new DB_DataContext())
{
//dc.Connection may be persistent across multiple DataContexts
}
现在,我已经在各种博客中找到了stackoverflow,可以更改连接的某些属性,而无需事务的开销:
// the following query should preferably be terminated,
// in case of a deadlock with a more important query
dc.ExecuteCommand("SET DEADLOCK_PRIORITY LOW");
// the following query should be aborted, if it takes too long to acquire the locks
dc.ExecuteCommand("SET LOCK_TIMEOUT 50");
// the following query can handly dirty reads and should not acquire read locks
dc.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
但这对我来说似乎很危险。
在当前的DataContext上执行这些命令实际上是否安全,或者这会使用非标准连接“中毒”连接池? 这些设置是否可能在不同的DataContexts中持续存在?
如果是这样,是否有一种安全的方式来解决,例如更改linq2sql查询的死锁优先级,而不强制执行新事务,或者这通常是不明智的?