2014-09-04 1 views
0

데이터베이스가 비어 있고 C# 응용 프로그램에서 채우고 하나의 .SaveChanges() 명령 만 사용해야합니다. 모든 것이 저장됩니다. , 또는 아무것도 저장되지 않습니다. 사람, 클래스, PersonClass : 내가 3 개 테이블이하나의 SaveChanges() 명령으로 처음부터 전체 데이터베이스 채우기

:

제가하는 데 문제는 이것이다. 그것들은 비어 있습니다.

그래서 C# 코드에서 엔티티 모델을 통해 Person {Id : 1, Name : John}을 추가합니다. 다음으로 John과 일부 클래스 사이에 관계를 추가하고 싶습니다. 그런 다음 클래스를 추가하려고합니다. 그래서 John을 만들면 다음과 같이합니다 :

John.Classes.Add(new Class 
         { 
          ClassId = 1 
         }); 

그리고 나서 db에 수학을 추가합니다.

그 후에는 SaveChanges()가 발생하고 PRIMARY KEY 제약 조건 위반이 발생합니다. 중복 키를 삽입 할 수 없습니다.

내 PersonClass 테이블에는 personId 및 classId라는 두 개의 열이 있습니다. 둘 다 기본 키이며 자동 증가 속성이 아니라 봇입니다.

사람은 ID와 이름의 두 열을가집니다. 클래스에는 하나의 열 ID 만 있습니다. id는 기본 키이지만 자동 인식은 아닙니다.

+0

필요 : EF6 예 이상 들어

. –

+0

@KeithPayne 나는 그 질문에 덧붙였다. 참조하십시오. –

+0

이 문제를 해결하는 것이 중요한 EF 모델입니다. 테이블은 모델의 인공물입니다. 내가 받고있는 것은 당신이 테이블 앞에 집중하여 말 앞에 카트를 넣고있을 수도 있다는 것입니다. 예를 들어, EF에서는 m : m 관계의 외부 참조 테이블을 정의하지 않습니다. EF가 그 일을합니다. 그리고 EF에서 올바르게 작동하면'SaveChanges()'를 호출 할 때 외래 키 값을 할당하는 작업도 처리합니다. 게시 된 모델에 대한 코드를 통해 좀 더 구체적으로 설명 할 수 있습니다. –

답변

0

"모든 것이 저장되었거나 아무것도 존재하지 않음"을 적용하려면 "하나의 SaveChanges"를 고수 할 필요가 없습니다. 동일한 트랜잭션 내에서 여러 저장로 분할해야합니다. 끝에 거래.

이점은 실패하면 어디에서 실패했는지에 대한 더 나은 시각을 갖게된다는 것입니다 (마지막에 오류가 발생하여 예외를 자세히 파악해야 함). 사람과 클래스에 대한 모델 정의를 볼 수 http://msdn.microsoft.com/en-us/data/dn456843.aspx

+0

좋은 조언을 주셨지만 그 문제는 해결하지 못했습니다. 아마도 이것은 주석으로서 더 낫습니다. –

+0

그 질문에 답해 드리겠습니다. 문제는 그 모든 것을 savechanges에 저장하는 것이 었습니다. 왜 예외가 있었는지 설명하지 않지만 아무도 그 것에 대답 할 수 없습니다. 귀하의 질문에 대답, 모델, 아니 좋은 대답. 그러나 이것은 분명히 대답의 일부이며, 그의 논점은 구원의 "모든 것이 든 아니든"본질에 대한 분명한 오해입니다. –

+0

@RonanThibaudau 어떻게해야합니까? –

관련 문제