2009-09-14 4 views
1

LINQ to SQL의 데이터 컨텍스트에 변경 사항을 제출 한 후 영향을받는 행 수를 찾는 방법을 아는 사람이 있습니까?LINQ to SQL에서 영향을받는 행 수를 찾는 방법은 무엇입니까?

처음에는 이런 일하고 있었에서

: 나는 이후이 작동하지 않는다는 것을 알아 낸

Using db as New MyDataContext() 
    db.Users.Attach(modifiedUser, True) 
    db.SubmitChanges() 

    Dim rowsUpdated As Integer = db.GetChangeSet().Updates.Count 
End Using 

을하고

db.GetChangeSet().Updates.Count 

은 오직 당신을하기 전에이 될 것입니다 얼마나 많은 업데이트 알려줍니다 SubmitChanges()를 호출합니다.

실제로 영향을받은 행 수를 알 수 있습니까?

답변

4

L2S는 영향을받은 각 행에 대해 개별 삽입/업데이트/삭제 명령문을 발행하므로 GetChangeSet 결과의 엔티티를 계산하면 에 해당하는 '영향을받은 행'수 *를 제공합니다.

변경 충돌 또는 유사한 이유로 인해 행을 업데이트 할 수없는 경우 하위 선택 중에 예외가 발생하고 트랜잭션이 롤백됩니다.

(* = ... 단 한 가지 예외가 있으며, 트리거 대신 트리거 가능한 뷰가있는 경우 트리거 대신 트리거가 업데이트 된 모든 행에 대해 여러 기본 행에 도달하는 상황이 발생할 수 있습니다. 가장자리의 경우 ... :)

0

저는 LINQ to SQL을 사용하지 않았습니다. 그러나 나는 그것이 가능하지 않을 수도 있다고 생각한다.

염두에 두는 이유는 SubmitChanges에 전화하기 전에 여러 항목을 업데이트 할 수 있기 때문입니다. 따라서, 당신이 찾고있는 "영향을받는 기록"은 알려지지 않을 것입니다.

0

여러 가지 작업이 커밋 될 수 있으므로 해당 정보를 다시 얻을 수는 없습니다.

SubmitChanges() 명령은 삽입, 업데이트 및 삭제를 커밋하고 각 행 (삭제 된/업데이트 된/삽입 된 행 등)에 영향을받는 행 수를 검색 할 수있는 방법이 없다는 것을 알 수 있습니다. 이미 발견 한 것처럼 무엇이 커밋 될지 만 볼 수 있습니다.

특히 한 작업을 수행하려는 경우 영향을받은 행 수를 반환하는 ExecuteCommand() 메서드를 사용할 수 있습니다.

0

의 비트 응용 프로그램이 확장 메서드를 추가한다 :

/// <summary> 
    /// Saves all chanches made in this context to the underlying database. 
    /// </summary> 
    /// <returns></returns> 
    /// <exception cref="System.InvalidOperationException"> 
    /// </exception> 
    public static int SaveChanges(this System.Data.Linq.DataContext context) 
    { 
     try 
     { 
      int count1 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count; 
      context.SubmitChanges(); 
      int count2 = context.GetChangeSet().Inserts.Count + context.GetChangeSet().Updates.Count + context.GetChangeSet().Deletes.Count; 
      return count1 - count2; 
     } 
     catch (Exception e) 
     { 
      throw new InvalidOperationException(e.Message); 
     } 
    } 
관련 문제