2013-10-21 3 views
1

여기에 두통이 있습니다. 첫 번째 접근 방식을 사용하여 Entity Framework 4에서 설계된 Session과 User 개체 사이에 하나 또는 둘 이상의 관계가 인 이 있습니다. 해야Entity Framework에서 관계를 업데이트하면 SQL 오류가 발생합니다.

  • 사용자 는 사용자가 세션 ()
  • 하나의 Session 이 (제로 - 일).

따라서 런타임 제가

Session session = context.Sessions.FirstOrDefault(s => s.Token.Equals(token)); 

그 후에 I 작성한 사용자를 사용하여 데이터베이스로부터의 세션을 당겨,이

user = context.Users.Create(); 

user.GUID = Guid.NewGuid(); 
user.Username = username; 
user.Firstname = firstname; 
user.Lastname = lastname; 
user.Session = session; 

context.Users.Add(user); 
context.SaveChanges(); 

때 I 등의 사용자 입력을 기반으로 생성 된 저장, SQL 서버 데이터베이스에 이미 시도하기 때문에 GUID를 시도하는 예외가 throw됩니다. 그래, 그렇습니다. 문제는 그것이 shouldnt 인 경우, 세션을 업데이트하고 그 세션에 속한 forein 키를 채워야합니다. 외래 키는 관계의 사용자 측에 있습니다. 괜찮습니다. 맞습니까?

편집 는 사용자 새로운 사용자 여야합니다. 사용자를 업데이트하는 것은 내가 성취하려는 것이 아닙니다. 또한 오류는 코드가 foreing 키를 업데이트하는 대신 동일한 기본 키 값을 사용하여 세션을 삽입하려고하기 때문에 발생합니다.

여기에 수행해야 무엇을 연대순 목록입니다 :

  • 세션이 세션
  • 사용자가
  • 사용자 <를 작성되는 데이터베이스에서 선택됩니다
  • 저장됩니다
  • 세션을 생성됩니다 - > 세션 관계가 설정 됨
  • 사용자가 저장 함

그리고 내가 무엇을 얻을 것은 : PRIMARY KEY 제약 조건 'PK_Sessions'의

위반. 개체 'dbo.Sessions'에 중복 키를 삽입 할 수 없습니다. 중복 키 값은 VALUE입니다. 그 진술서는 만료되었습니다.

저는 지난 2 시간 동안이 문제를 해결해 왔습니다.

+1

문제가 변경 되었기 때문에 내 대답이 삭제되었습니다. – Marco

답변

1

편집 : 변경된 문제 설명 :

업데이트의이 종류를 취급 할 때 항상 같은 컨텍스트 인스턴스를 사용하는지 확인을 반영하기 위해 내 대답을 변경.

여기서 발생하는 것으로 보인 것은 한 세션에서 세션이 검색되었지만 사용자가 해당 컨텍스트의 다른 인스턴스에 저장되었다는 것입니다. 따라서 새로운 컨텍스트에서 세션은 새로운 것으로 보였으므로 세션이 잘못 표시되었습니다 (부당하게)

+0

내 편집을 참조하십시오. 갑자기 내 질문이 약간 모호하다는 것을 알게되었습니다. 응용 프로그램이 새로운 사용자를 삽입하고 세션을 업데이트하는 대신에 중복 세션을 삽입하려고하는 관계입니다. – Craimasjien

+0

확인, 실제로 더 명확합니다 :) GUID에 대한 귀하의 언급은 나를 물리쳐 버렸습니다. – oerkelens

+0

예, 노력하고 있습니다. 이미 존재하는 세션을 새로운 사용자와 연결하고 저장하는 것. – Craimasjien

관련 문제