写入Task.Factory.StartNew中的实体框架数据库

时间:2014-06-24 15:11:51

标签: asp.net entity-framework

如何在单独的线程中在实体框架中将某些内容保存到我的数据库中? 我想做的事情看起来像那样,但显然不会那样:

public class ThingsHandler : IHttpHandler
{
    private DatabaseContext db = new DatabaseContext();

    private void ProcessThing()
    {
        System.Threading.Tasks.Task.Factory.StartNew(() =>
        {
            Thing dbThing = db.Things.Where(...).AsEnumerable().LastOrDefault();
            dbThing.some_property = true;
            db.SaveChanges();
        }
    }

我希望,我能够说清楚,我希望实现的目标。但是我需要做什么?

1 个答案:

答案 0 :(得分:0)

如果您希望继续执行任务,则应将上下文初始化放在任务中:

System.Threading.Tasks.Task.Factory.StartNew(() =>
{
        var db = new DatabaseContext();
        Thing dbThing = db.Things.Where(...).AsEnumerable().LastOrDefault();
        dbThing.some_property = true;
        db.SaveChanges();
}

但是如果你使用EF6,你可能想要使用异步方法:

private async void ProcessThing()
{        
    Thing dbThing = await db.Things.Where(...).AsEnumerable().LastOrDefaultAsync();
    dbThing.some_property = true;
    await db.SaveChangesAsync();
}