我使用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();});
答案 0 :(得分:2)
错误消息非常准确地指示问题。数据库上下文不是线程安全的。因此,您无法从与创建数据库上下文不同的线程访问数据库上下文。
你的问题清楚地表明你根本不理解线程,所以你真的需要从研究线程如何工作以及线程安全意味着什么开始。