2009-11-25 3 views
0

여기에 장면이 있습니다 ..... LINQ에서 두 개의 별도 컨텍스트가 있고 실제 데이터베이스는 하나이며 컨텍스트가 근본적으로 문제를 해결하며이 경우에는 세 개의 테이블을 사용합니다.LINQ to SQL 다중 DBML 파일

표 1 (통해 AccountId)는 (상황 1)

표 2 (PersonId)는 (상황 2)

그래서 여기 일 (2 컨텍스트) (통해 AccountId, PersonId) 3 테이블 (1)에서 레코드가 생성 된 후에는 (컨텍스트 2) 레코드가 테이블 3에서만 레코드를 생성 할 수 있습니다.

이를 염두에두고, 나는 3 개의 Linq를 모두 SQL 오브젝트로 가져 와서 관찰자를 작성하는 ActionScheduler를 작성했습니다 중요한 속성 (AccountId, PersonId) 및 둘 다 기본값 (0)이 아닐 때, 삽입되었음을 의미하며, 세 번째 (표 3) 객체는 AccountId로 설정되고 표 3의 표 2 목록에 추가됩니다.

그래서 내가해야 할 일은 기본적으로 SubmitChanges를 2 번 호출하면 상황이 좋을 것입니다.

잘 때 물건이 떨어져. 먼저 Table 1의 첫 번째 호출을 삽입하여 ActionScheduler에서 이벤트를 트리거 한 다음 Table 3 객체를 업데이트 한 다음 Table 2가 표 3 객체를 트리거하여 삽입합니다 (이제는 PersonId, AccountId가 모두 유효 함), Table 3 개체가 표 2 개체에 추가되었습니다. 두 번째 저장이 호출되고 여기에 변경 사항이 없으므로 아무 것도 추가되지 않습니다. 동일한 컨텍스트가 열려있는 동안 다른 개체 집합을 추가하고 다시 저장하면 새 Table 3 개체가 얻지 않습니다. 추가 된 (동일한 동작)하지만 다른 하나는 완벽한 값으로 수행되므로이 ​​사람들은 항상 한 발 뒤로 물러서는 것처럼 보입니다.

모든 요망? 이 작업을 수행하는 더 좋은 방법이 있습니까, SubmitChanges 수명주기가 얼마나 활발합니까?

모든 질문에 대해 미안하지만 이것은 정말로 나를 괴롭 히고 있습니다. 그리고 분명한 감사.

답변

0

단일 데이터베이스를 별도의 컨텍스트로 분할해서는 안됩니다. 당신은 하나의 맥락 아래로 통합 할 경우 다음 수행 할 수 있습니다 하나의 호출에 세 가지를 모두 제출하고 개체에 ID를 업데이트합니다 (ID 속성 ID 열 수 있습니다 가정)합니다

YourDataContext db = new YourDataContext(); 

Table1 account = new Table1(); 
db.Table1s.InsertOnSubmit(account); 

Table2 person = new Table2(); 
db.Table2s.InsertOnSubmit(person); 

Table3 link = new Table3(); 
link.Account = account; 
link.Person = person; 
db.Table3s.InsertOnSubmit(link); 

db.SubmitChanges(); 

.

+0

이것은 내가 설명했듯이 다른 컨텍스트에서 Table1이 남기 때문에 실행 순서를 보장 할 수 없으므로 계정의 accountId는 0이되고 실패합니다. – Oakcool

+0

맞아, 나는 DBML을 하나의 데이터베이스로 분리해서는 안된다고 말하고있다. 동일한 DataContext (의도 한대로)에서 모든 작업을 수행하면 실행 순서가 자동으로 처리됩니다. – Nate