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问题标题表示异步的,所以我假设他在这些线程中进一步使用异步操作。很抱歉。我删除了我的评论。