2014-03-27 3 views
0

그래서 나는 진짜 문제가 있습니다. 데이터베이스에 추가 할 행에 외래 키를 추가합니다. 나는 그들이 모든지도를 완벽하게 잘 배치 할 수 있도록 모든 참조 설정을했습니다.Linq to SQL 데이터베이스 관리

문제는 모든 행을 제출할 때까지 쿼리를 실행하지 않고 키를 추가하려고한다는 것입니다.

예를 들어 테이블

**FirstNameTable** **LastNameTable**  **People-Table** 
Id | Value   Id | Value    Id | FirstNameID | LastNameID 
----------------  ---------------   ------------------------------ 
1 | Jeff    1 | jones    1 | 1   | 3   
2 | Joe    2 | Richards   2 | 2   | 1   
3 | John    3 | bobson    3 | 3   | 2   

그래서 표 3은 3 외래 키 (FirstNameTable에 FirstNameId 링크, 사람들 - 테이블에 LastNameTableand ParentId 링크에 LastNameId 링크)가 있습니다. 이 예를 위해, 성 (姓)이 같은 사람이 결코 없을 것이라고 말하면됩니다.

테이블 3에 대한 새 항목을 추가하고 싶지만 기존 항목이있는 경우 기존 항목을 사용하거나 새 항목을 작성하고 싶습니다. 이제

People-Tabletb3 = new People-Table() 
{ 
    FirstNameTable = new FirstNameTable(){ Value = Jeff}; 
    LastNameTable= new LastNameTable(){ Value = jones}; 
} 

을하고

항상 내 다른 두 테이블에 새 항목을 만듭니다. 각 테이블의 각 행에 대해 다음 작업 수행

if ((from u in dc.Users where u.Name == name select u).Count() > 0) 
    // just grab the id 
else 
    // make it then grab the id 

더 많은 쿼리를 수행하고 업로드 속도가 느려지므로 실제로 옵션이 아닙니다.

내 질문은 이름과성에 대해 기존 행을 사용하거나 존재하지 않는 경우 새 행을 작성할 LINQ를 사용하여 새 피플 테이블 행을 작성하는 방법입니다. if-else를하지 않고서.

+0

정말 필요한가요? 또는 People-Table에서 [FirstName]과 [LastName]의 복합 키를 만들 수 있습니다. – PoweredByOrange

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야한다"는 것을 참조하십시오. –

+0

많은 질문에 추가하지 않고도 이미 존재하는지 여부에 따라 다른 테이블의 요소를 추가하거나 사용하는 방법에 대한 질문이 더 많습니다. 각 시간을 입력하고 각 행에 대한 추가 쿼리를 실행하기 만해도 약 500 - 600 행이 있으므로 제출 시간이 크게 늘어납니다. – Crypic2009

답변

0
  1. 삽입하려고하는 항목 목록의 모든 고유 한 이름 목록을 만듭니다.
  2. 방금 ​​만든 목록에 이름이있는 Users 테이블의 모든 값을 가져 오는 쿼리를 만듭니다. 이 값을 사전에 넣고 이름을 입력하십시오.
  3. 삽입 할 항목을 반복하고 각각에 대해 작성한 사전의 값과 연관 시키거나 새 값을 작성하여 사전에 추가하십시오.

두 번의 왕복으로 원하는만큼 새로운 항목을 만들어야합니다.

+0

그래서 linq 또는 적어도 하나의 'submitChanges()'를 사용하여 단일 쿼리를 통해이 모든 작업을 수행 할 방법이 없습니까? – Crypic2009

+0

필자가 설명하는 방식은'SubmitChanges()'에 대한 한 번의 호출로 모든 것을 할 수있게 해줍니다. 이 방법은 생성하려는 항목의 수에 관계없이 미리 하나의 쿼리가 필요합니다. 그러나 LINQ to SQL에는 개체 삽입 또는 업데이트 명령을 실행하는 방법이 없습니다. 또 다른 가능성은 트리거가있는 뷰를 작성하여 "삽입"명령문을 발행하면 데이터베이스가이를 삽입 또는 업데이트로 변환하는 것입니다. – StriplingWarrior

+1

나는 첫 번째 답변을 사용 했으므로 데이터를 빠르게 업로드 할 수 없다 (다른 것들도하고있다). 그러나 여전히 중요한 개선점이다. 내가 알아낼 수있는 유일한 방법은 효과적으로 시스템에 쿼리를 작성하고 서버에서 실행시키는 것입니다. 그러나이 방법은 유지하기가 더 쉽습니다. 감사 – Crypic2009