我正在使用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()
没有提交任何更改,但我还没有确定对象“submit”保存更改。如何在不保持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;
}
答案 0 :(得分:3)
您需要对Attach
使用DataContext
方法。所以,你的步骤是:
1)使用DataContext
的一个实例从数据库中查询对象
2)做一些改变
3)创建新的DataContext
实例并附加修改后的实体。
using (var dataContext = new DataContext(ConnectionString))
{
dataContext.TABLE_NAME.Attach(modifiedEntity);
dataContext.SubmitChanges();
}
答案 1 :(得分: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();
}