首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBContext多线程

DBContext多线程
EN

Stack Overflow用户
提问于 2012-06-06 02:08:29
回答 1查看 1.4K关注 0票数 1

我有一个网站,我已经建立了在VS2010使用MVC3 (剃刀)

我使用DBContexts访问数据库,我的连接字符串是:

代码语言:javascript
复制
<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

代码语言:javascript
复制
    protected void Application_Start()
    {
        ...
        Manager m = new Manager();
        Thread t = new Thread(m.Start);
        t.Start();
    }

我的一个控制器的一部分:

代码语言:javascript
复制
public class myController : Controller
{
    private SystemDBContext db = new SystemDBContext();


    public ViewResult Index()
    {
        var engines = db.Engines.Include(e => e.state);
        return View(engines.ToList());
    }
    ...

我的循环看起来像这样:

代码语言:javascript
复制
public class Manager
{
    public void Start()
    {
        while (true)
        {
            SystemDBContext db = new SystemDBContext();
            var query = from ...
        }
        ...

执行此操作的最佳实践是什么?我一直在考虑单例、锁或同步,调整连接字符串以允许多个连接到数据库文件,或者让我的循环请求执行更新的网页。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 02:16:41

似乎正在发生的情况是,循环使用DBContext并锁定db文件,然后每当您尝试在网站本身的DBContext中进行更改时,该文件都在使用中。

回到阅读文档?说明WinCE不是多线程服务器的那部分。改用SQL Server - Express is free。CE用于可伸缩性有限的项目,单线程访问。

执行此操作的最佳实践是什么?

使用合适的数据库服务器。CE是一个严重的问题,特别是如果你总是启动/停止数据库引擎,这会导致大量低效的磁盘访问。

SQL Server就是为此而做的,正如我所说的- Express很便宜。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10902528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档