2017-10-18 13 views
1

저는 엔터티 프레임 워크를 사용하고 있습니다.새 하위 항목에 기존 하위 항목을 추가하는 방법

내 모델은 다음과 같이이다 :

그룹 : ID, 이름

사용자 : ID, 이름, 그룹 ID.

상황은 다음과 같습니다. 나는 어떤 그룹에도 속하지 않은 User (User1)가 있습니다.

새 그룹을 만들고이 사용자를 새 그룹에 추가하려고합니다.

는이 코드가 있습니다

Dim grp1 as new Group 
grp1.name="Students" 
context.Groups.Add(grp1) 
context.savechanges() 
usr1.GroupID=grp1.ID 
context.savechanges() 

이 코드는 작동을하지만 두 번 SaveChanges를 불렀다. 기존 usr1을 grp1 이후의 자식 컬렉션에 연결하여 Savechanges를 한 번만 호출 할 수 있습니까?

감사합니다.

+0

가 첫 번째 context.SaveChanges을 제거하는 시도 해 봤나 (블로그 예 참조)? 나는 두 개의 Add()가 여전히 올바르게 작동 할 것이라고 생각한다. – Kokombads

+0

'Group'의'Users' 콜렉션에'User'를 추가하려면'grp1.Users.Add (usr1)'을 사용하십시오. – jmcilhinney

+0

@jmcilhinney하지만 usr1이 존재하며 새로운 개체가 아닙니다. – Adriano

답변

0

usr1이 추적 된 항목 인 경우 ID를 사용하는 대신 사용자의 Group 탐색 속성에 그룹을 추가 할 수 있습니다. 네비게이션 속성에 새로운 오브젝트를 할당하여

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx

Dim grp1 as new Group 
grp1.name="Students" 
usr1.Group=grp1 
context.savechanges() 

. 다음 코드 은 코스와 부서 간 관계를 만듭니다. 개체가 컨텍스트에 연결된 경우 코스는 부서에도 추가됩니다. 코스 컬렉션 및 코스 개체의 해당 외래 키 속성은 부서의 키 속성 값으로 설정됩니다. 코스. 부서 = 부서;

https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx

)는 (

using (var context = new BloggingContext()) 
{ 
    // Add a new User by setting a reference from a tracked Blog 
    var blog = context.Blogs.Find(1); 
    blog.Owner = new User { UserName = "johndoe1987" }; 

    context.SaveChanges(); 
}