LINQ to SQL 연결을 닫은 후 변경 사항을 어떻게 제출할 수 있습니까?

StackOverflow https://stackoverflow.com//questions/11692782

  •  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();
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top