C# 来自多个线程的DataContext.ExecuteMethodCall
我使用DBML设置了DataContext,并使用ExecuteMethodCall调用SQL Server数据库上的存储过程 这工作正常,但我发现当我同时调用两个函数(通过BackgroundWorkers)时,第二个线程被阻塞,直到第一个线程完成 有没有办法同时运行多个ExecuteMethodCalls,或者这需要单独的DataContext 函数调用示例:C# 来自多个线程的DataContext.ExecuteMethodCall,c#,sql,multithreading,linq-to-sql,datacontext,C#,Sql,Multithreading,Linq To Sql,Datacontext,我使用DBML设置了DataContext,并使用ExecuteMethodCall调用SQL Server数据库上的存储过程 这工作正常,但我发现当我同时调用两个函数(通过BackgroundWorkers)时,第二个线程被阻塞,直到第一个线程完成 有没有办法同时运行多个ExecuteMethodCalls,或者这需要单独的DataContext 函数调用示例: public class MyClass: MyDataContext { public MyClass(string co
public class MyClass: MyDataContext
{
public MyClass(string connection) : base(connection)
{
}
// ...
[Function(Name = "dbo.get_proposed")]
public ISingleResult<Order> get_proposed([Parameter(DbType = "Varchar(20)")] string region)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), region);
return ((ISingleResult<Order>)(result.ReturnValue));
}
[Function(Name = "dbo.get_parent_groups")]
public ISingleResult<Account> get_parent_groups([Parameter(DbType = "VarChar(40)")] string group_name)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), group_name);
return ((ISingleResult<Account>)(result.ReturnValue));
}
// ...
}
公共类MyClass:MyDataContext
{
公共MyClass(字符串连接):基(连接)
{
}
// ...
[函数(Name=“dbo.get_proposed”)]
公共ISingleResult get_proposed([参数(DbType=“Varchar(20)”)]字符串区域)
{
IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod()),region);
返回((IsingResult)(result.ReturnValue));
}
[函数(Name=“dbo.get\u parent\u groups”)]
公共ISingleResult获取\u父\u组([参数(DbType=“VarChar(40)”)]字符串组\u名称)
{
IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod()),组名称);
返回((IsingResult)(result.ReturnValue));
}
// ...
}
锁定发生在ExecuteMethodCall,在第一个线程完成之前不会返回控件。您根本不能同时使用
DataContext
。文件没有说这是安全的。除非文档中另有说明,否则对象上的所有并发活动都是不安全的
每个线程使用一个DataContext