2016-08-06 2 views
0

시나리오다른 클래스에 여러 개의 외래 키가있는 클래스를 추가 할 때 Entity Framework에서 외래 키를 유지 관리하는 방법은 무엇입니까?

나는

  1. 사용자 (ID, Email, Password) 같은 테이블
  2. user_profile로 (ID, UserID_FK, First, Last, Created_On, Created_By_FK)

이 내가 새 사용자 계정을 생성하는 방법이다이

Users us = new Users 
{ 
    Email = '[email protected]', 
    Password = 123 
}; 

User_Profile up = new User_Profile 
{ 
    First = 'Kamalpreet', 
    Last = 'Singh', 
    Created_On = DateTime.Now 
}; 

us.User_Profile.Add(up); 

Context x = new Context(); 
x.Users.Add(us); 
db.Save(); 

위의 코드는

ID = 1 
UserID_FK = 100 
First = Kamalpreet 
Last = Singh 
Created_On = 2016-08-06 10:40:10.000 
Created_By_FK = NULL 

이 질문 user_profile로 테이블에서

Users(ID)가 복사됩니다 왜 데이터베이스 -

사용자 테이블 -

ID = 100 
Email = [email protected] 
Password = 123 

user_profile로 테이블 -에서 다음 레코드를 작성합니다 User_Profile(UserID_FK) 테이블에만 있고 ge가 아닙니다. t 복사 된 User_Profile(Created_By_FK)

UserID_FK 및 Created_By_FK 열 모두 사용자 (ID) 테이블에 대한 외래 키 참조입니다.

+0

코드를 먼저 사용하고 있습니까? 아니면 데이터베이스를 처음 사용합니까? –

+0

데이터베이스가 먼저입니다, 예 – kamalpreet

답변

1

데이터베이스를 처음 생성 할 때 추가 할 컬렉션이 2 개 있습니다 (두 개의 관계가 설정된 경우 - 각 키마다 하나씩). 예를 들어, 다음을 참조한다 :

  1. us.User_Profile.Add() 그런 다음 외국을 모두 가지고 두 컬렉션에 프로필을 추가 ​​할

  • us.User_Profile2.Add을() 지속될 때 키가 올바르게 업데이트되었습니다. Entity Framework는 동일한 개체 참조를 두 개의 컬렉션에 추가 한 사실을 추적하여 올바르게 저장합니다.

    참고 : 다른 옵션은 사용자를 저장 한 다음 두 외래 키 속성에 반환하는 ID를 넣는 것입니다.하지만이 방법은 효율성이 떨어질 수 있습니다.

  • +0

    'Add' 메소드는 EF에서 사용되는 미리 정의 된 메소드입니다. – kamalpreet

    +0

    "us"는 예제에서 인스턴스화하는 코드 첫 번째 스타일 클래스와 유사합니다. DbContext와 데이터 세트에는 메소드가 추가되어 있지만, "us"변수에서 add 메소드가 어디에서 오는지 이해할 수 없습니다. 그럼에도 불구하고 EF는 각 탐색 속성에 대한 별도의 컬렉션에 대해 작동합니다. 따라서 "UserProfiles"속성 (예를 들어)에 프로필을 추가하는 것은 사용자의 "ProfilesCreatedBy"속성에 추가하는 것과 다릅니다. –

    +0

    사실 그것은'us.User_Profile.Add (up);'입니다. 미안해, 내 잘못이야! – kamalpreet