0

我正在使用 LINQ 访问数据库,并对记录进行更改。我像这样检索记录:

using(var db = new DatabaseDataContext(connectionString))
{
    var query =
        from item in db.table
        where item.senddate == null
        select item;

    results = query.ToList();
}

获得项目后,我会处理每个项目,这需要与 Web 服务进行通信,并且每条记录可能需要一分钟以上的时间。记录更新后,我需要提交更改,但我不知道如何继续。目前,我执行以下操作:

List<table> toProcess = QueryDb();  // Calls the previously displayed method

foreach (table item in toProcess)
{
     item.result = QueryDb(item.xmlrequest);
     PostToDb(item);
}

...

private bool PostToDb(table submit)
{
    submit.senddate = DateTime.Now;

    using (var db = new DatabaseDbDataContext(connectionString))
    {
        db.SubmitChanges();
    }

    return result;
}

db.SubmitChanges()不提交任何更改,但我还没有真正设置对象“提交”包含更改。在一次处理一个文件时,如何在不保持 Db 连接打开几分钟的情况下提交对条目所做的更改?

提前感谢您的任何帮助。

部分解决

我不认为这是最好的解决方案,但我能够让它与我的代码的以下更改一起工作:

private bool PostToDb(table submit)
{
    using (var db = new DatabaseDataContext(connectionString))
    {
        var query =
            from item in db.table
            where item.iprimaryid.Equals(submit.iprimaryid)
            select item;

        //  There can only be one result, but this was the only 
        //  way I could think to access it
        foreach (var item in query)
        {
            item.senddate = DateTime.Now;
            item.result = submit.result;
        }

        db.SubmitChanges();
    }

    return result;
}
4

2 回答 2

3

您需要Attach为您的DataContext. 所以,你的步骤是:

1)使用您的一个实例从数据库中查询对象DataContext
2)进行一些更改
3)创建新DataContext实例并附加修改后的实体。

using (var dataContext = new DataContext(ConnectionString))
{
     dataContext.TABLE_NAME.Attach(modifiedEntity);
     dataContext.SubmitChanges();
}
于 2012-07-27T17:57:56.957 回答
0

您可以在外部范围内声明数据上下文并将其作为参数传递给需要访问数据库的方法吗?像这样的东西:

using (var db = new DatabaseDbDataContext(connectionString))
{
    var toProcess = QueryDb(db);

    // Do whatever processing you need to do...

    toProcess.ForEach(t => t.SendDate = DateTime.Now);

    db.SubmitChanges();
}
于 2012-07-27T17:45:44.847 回答