我有一个网站,我已经建立,其中使用MVC3(剃刀)VS2010的DbContext多线程
我用DBContexts访问datbase,我的连接字符串是:
<add name="SystemDBContext"
connectionString="Data Source=|DataDirectory|System.sdf"
providerName="System.Data.SqlServerCe.4.0" />
我想有一个游戏循环,所以我在Application_Start中启动了一个新线程,它使用DBContext循环访问数据库。
什么似乎是发生的是,循环使用的DbContext并锁定数据库文件,然后当你试图使网站本身从的DbContext变化,该文件正在使用中。
这不是当我宣布的DbContext,它发生时,我尝试使用的DbContext执行某种形式的搜索或更新。
这里是我的Global.asax我的控制器之一的
protected void Application_Start()
{
...
Manager m = new Manager();
Thread t = new Thread(m.Start);
t.Start();
}
部分:
public class myController : Controller
{
private SystemDBContext db = new SystemDBContext();
public ViewResult Index()
{
var engines = db.Engines.Include(e => e.state);
return View(engines.ToList());
}
...
而且我的循环看起来是这样的:
public class Manager
{
public void Start()
{
while (true)
{
SystemDBContext db = new SystemDBContext();
var query = from ...
}
...
什么是最好的做法为了做到这一点?我一直在考虑Singletons,Locks或Synclocks,调整连接字符串以允许多重连接到数据库文件,或让我的循环请求一个执行更新的网页。
任何想法?
循环线程创建它的DBContext一次并挂在它上面,还是只在需要时为特定的工作单元创建一个?你可以在哪里创建DBContext的代码? – hatchet
我忘了将它包含在原始文章中,我已将它放入现在。循环使用新的上下文重复数据库。 – pcaston2