LINQ を使用してデータベースにアクセスし、レコードを変更しています。次のようにレコードを取得します。
using(var db = new DatabaseDataContext(connectionString))
{
var query =
from item in db.table
where item.senddate == null
select item;
results = query.ToList();
}
アイテムを取得した後、各アイテムを処理します。これには Web サービスとの通信が必要で、レコードごとに 1 分以上かかる場合があります。レコードが更新されたら、変更を送信する必要がありますが、どのように進めればよいかわかりません。現在、私は次のことを行っています。
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()
変更を送信しませんが、オブジェクト「送信」が変更を保持するように実際に設定していません。ファイルが一度に 1 つずつ処理される間、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;
}