2012-11-28 1 views
0

DataContext 개체와 Linq에서 C#으로 작업하고 있습니다. 위시리스트의 소원에 대한 투표를 관리자가 첫 번째 질문이 중복임을 결정한 질문으로 이전하려고합니다. 그러나 vote 테이블에 WishIdUserId이 기본 키로 있으므로 사용자가 이미 대상으로 투표 한 경우 삽입이 실패합니다. 내가하고 싶습니다 (삽입하기 전에 vote 테이블을 쿼리하지 않고) 이러한 경우를 무시하고 모든 유효한 투표를 삽입하십시오. 이것이 내가하고 싶은 일입니다. 내가 지금이오류가 발생하면 계속 DataContext를 삽입하십시오.

using (linqWishesDataContext dataContext = new linqWishesDataContext()) 
{ 
    try 
    { 
     dataContext.WishlistUpvotes.InsertAllOnSubmit(destinationVotes); 
     dataContext.SubmitChanges(ConflictMode.ContinueOnConflict); 
    } 
    catch{} 
} 

하나 개의 솔루션이 작업을 수행하는 것입니다

이동 필요 천 표는 몇 백 또는 몇이있는 경우
foreach (WishlistUpvote vote in destinationVotes) 
{ 
    using (linqWishesDataContext dataContext = new linqWishesDataContext()) 
    { 
     try 
     { 
      dataContext.WishlistUpvotes.InsertOnSubmit(vote); 
      dataContext.SubmitChanges(); 
     } 
     catch { } 
    } 
} 

그러나 그것은을 만드는 나쁜 생각입니다 각 투표마다 새 DataContext 어떤 제안?

답변

1

매번 새로운 DataContext을 만들 필요는 없습니다. 당신은 동일한 것을 재사용 할 수 있으며, 지금처럼 당신의 전화를 반복 할 수 있습니다.

using (linqWishesDataContext dataContext = new linqWishesDataContext()) 
{ 
    foreach (WishlistUpvote vote in destinationVotes) 
    { 
     try 
     { 
      dataContext.WishlistUpvotes.InsertOnSubmit(vote); 
      dataContext.SubmitChanges(); 
     } 
     catch { } 
    } 
} 

물론 이것은 각 업데이트에 대해 개별 명령을 실행합니다. (비록 ADO.NET 연결 풀링은 여전히 ​​배후에서 작동 할 것이기 때문에 이 아닙니다. horrible) 수동으로 SQL을 삽입하지 않으면, 당신이 할 수있는 일이 무엇인지 알지 못합니다. 데이터 컨텍스트는 트랜잭션에서 SubmitChanges()에 대한 한 번의 호출에 대한 모든 변경을 수행하므로 '모두 또는 아무것도 없음'동작을 얻습니다.