如何使用两个 DbContext 操作异步使用 LINQ to Entities

本文关键字:异步 LINQ Entities to 操作 DbContext 何使用 两个 | 更新日期: 2024-11-06 11:13:50

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

问题是如果缓存对象中没有数据,我试图使用单线程从数据库中获取它。

它给了我以下错误:

创建模型时不能使用该上下文。这 如果在上下文中使用,则可能会引发异常 OnModelCreate 方法,或者如果相同的上下文实例由 多个线程同时进行。请注意,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();});

如何使用两个 DbContext 操作异步使用 LINQ to Entities

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

您的问题清楚地表明您根本不了解线程,因此您确实需要从研究线程的工作原理以及线程安全的含义开始。