我有一個網站,我已經建立,其中使用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