我有一个用于进行数据库调用的 Linq-to-SQL DataClasses 对象。我把它包装成这样:
public class DataWrapper {
private DataClassesDataContext _connection = null;
private static DataWrapper _instance = null;
private const string PROD_CONN_STR = "Data Source=proddb;Initial Catalog=AppName;User ID=sa;Password=pass; MultipleActiveResultSets=true;Asynchronous Processing=True";
public static DataClassesDataContext Connection {
get {
if (Instance._connection == null)
Instance._connection = new DataClassesDataContext(DEV_CONN_STR);
return Instance._connection;
}
}
private static DataWrapper Instance {
get {
if (_instance == null) {
_instance = new DataWrapper();
}
return _instance;
}
}
}
我有几个线程使用这个包装器来进行存储过程调用,如下所示:
DataWrapper.Connection.Remove_Message(completeMessage.ID);
在极少数情况下,我的 DataClasses 对象会抛出异常:
ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为关闭。
我没有以任何方式管理连接的状态——我认为 Linq-to-SQL 应该处理这个问题。每次我拨打电话时,我都可以检查 Connection 的连接状态,如果它已关闭则打开它,但这似乎是一种黑客行为。
我尝试在连接字符串上放置MultipleActiveResultSets=true
和Asynchronous Processing=True
尝试处理 SQL 强制关闭连接的可能性,但这似乎没有帮助。
有任何想法吗?