首页 > 解决方案 > DataContext.Connection 是否跨不同的 Datacontexts 共享设置

问题描述

在使用 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 查询的死锁优先级,而不强制执行新事务,或者这通常是不明智的?

标签: c#sql-serverlinq-to-sqldatabase-connectiondatacontext

解决方案


推荐阅读