Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ对实体异步使用两个DbContext操作?_C#_Multithreading_Linq_Entity Framework - Fatal编程技术网

C# 如何使用LINQ对实体异步使用两个DbContext操作?

C# 如何使用LINQ对实体异步使用两个DbContext操作?,c#,multithreading,linq,entity-framework,C#,Multithreading,Linq,Entity Framework,我正在使用Linq to Entities执行数据库操作 问题是,若缓存对象中并没有数据,那个么我试图使用单线程从数据库中获取数据 它给了我以下错误: 创建模型时无法使用上下文。这 如果上下文在内部使用,则可能引发异常 OnModelCreating方法,或者 同时执行多个线程。请注意,DbContext的实例成员 并且相关类不能保证线程安全 为了克服这个问题,我尝试了以下解决方案: using (var tran = new TransactionScope()) { Task.Fac

我正在使用
Linq to Entities
执行数据库操作

问题是,若缓存对象中并没有数据,那个么我试图使用单线程从数据库中获取数据

它给了我以下错误:

创建模型时无法使用上下文。这 如果上下文在内部使用,则可能引发异常 OnModelCreating方法,或者 同时执行多个线程。请注意,DbContext的实例成员 并且相关类不能保证线程安全

为了克服这个问题,我尝试了以下解决方案:

using (var tran = new TransactionScope())
{
    Task.Factory.StartNew(() => DoSomething());
    Task.Factory.StartNew(() => DoSomethingElse());
    // Wait all
    tran.Complete();
}
但是,如果我可以使用另一个正在运行的线程执行此操作:

//My code
//thread to run Method1() 
method 1()
{
//DO SOMETHING
//CALL METHOD2()
} 
简单地像这样做是否好:

string res = null;
Thread newThread = new Thread(() => {res = Method2();});

错误消息非常准确地指示问题。数据库上下文不是线程安全的。因此,您无法从创建数据库上下文的线程以外的线程访问该数据库上下文


您的问题清楚地表明您根本不了解线程,因此您确实需要从研究线程如何工作以及线程安全意味着什么开始

上下文和transactionscope在AFAIK中都不是线程安全的,因此在多个线程或任务中或以异步方式重用都不起作用。:(在我的场景中我应该怎么做?您能帮助我吗me@AkashKava你在哪里看到他使用“异步特性”他在一个线程池线程上只执行两个委托。他并行执行它们,但它们不是异步的。@YuvalItzchakov问题标题表示异步的,所以我假设他在这些线程中进一步使用异步操作。很抱歉。我删除了我的评论。