LINQ to SQL 연결을 닫은 후 변경 사항을 어떻게 제출할 수 있습니까?
-
12-12-2019 - |
문제
LINQ를 사용하여 데이터베이스에 액세스하고 레코드를 변경합니다.나는 그렇게 기록을 검색합니다 :
using(var db = new DatabaseDataContext(connectionString))
{
var query =
from item in db.table
where item.senddate == null
select item;
results = query.ToList();
}
.
항목을 가져온 후에는 웹 서비스와의 통신을 필요로하는 각각을 처리하고 레코드 당 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()
는 변경 사항을 제출하지 않지만 "제출"객체가 변경 사항을 보유하고 있음을 실제로 설정하지 않았습니다.파일이 한 번에 하나씩 처리되는 동안 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;
}
. 해결책
Attach
에 대한 DataContext
메소드를 사용해야합니다.따라서 다음 단계는 다음과 같습니다.
1) DataContext
의 한 인스턴스를 사용하여 데이터베이스에서 쿼리 객체
2) 약간의 변경을하십시오
3) 새 DataContext
인스턴스를 만들고 수정 된 엔티티를 첨부하십시오.
using (var dataContext = new DataContext(ConnectionString))
{
dataContext.TABLE_NAME.Attach(modifiedEntity);
dataContext.SubmitChanges();
}
. 다른 팁
외부 범위에서 데이터 컨텍스트를 선언하고 데이터베이스에 액세스 해야하는 메소드에 대한 매개 변수로 전달할 수 있습니까?이와 같은 것 :
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();
}
. 제휴하지 않습니다 StackOverflow