[英]DBContext multi-threading
我有一個我在VS2010中構建的網站,它使用的是MVC3(Razor)
我使用DBContexts訪問數據庫,我的連接字符串是:
<add name="SystemDBContext"
connectionString="Data Source=|DataDirectory|System.sdf"
providerName="System.Data.SqlServerCe.4.0" />
我想要一個游戲循環,所以我在Application_Start中啟動了一個新線程,它使用DBContext循環和訪問數據庫。
似乎正在發生的是循環使用DBContext並鎖定db文件,然后每當您嘗試從網站本身的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並鎖定db文件,然后每當您嘗試從網站本身的DBContext進行更改時,該文件都在使用中。
回去閱讀文檔? 它說WinCE的部分不是多線程的服務器。 請改用SQL Server - Express是免費的 。 CE用於有限的可伸縮性項目,單線程訪問。
這樣做的最佳做法是什么?
使用適當的數據庫服務器。 CE是非常有問題的,特別是如果你一直啟動/停止數據庫引擎,這會導致很多低效的磁盤訪問。
SQL Server正是為此完成的,正如我所說的 - Express很便宜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.