2013-10-15 2 views
0

나는 이것이 이전에 묻혔다는 것을 알 수 있습니다. 어쩌면 나는 정확하게 검색하지 않을 것이지만 그 답을 찾지 못한다. EF 관계가 링크 대신에 새로운 레코드를 추가합니다.

var userRepo = new UserRepository(); 
var user = new User {Name = "Bob"}; 
userRepo.Save(user); 

var roleRepo = new RoleRepository(); 
var role = new Role {Name = "My role"}; 
roleRepo.Save(role); 

user.Roles.Add(role); //I expect this to link user to role, but it adds a second role 
userRepo.Save(user); 

은 어쩌면 문제는 내 저장소에 있지만 나는 의심 : 콜린 지적

public void Save(Role role) 
{ 
    if (role.ID == 0) 
     context.Roles.Add(role); 
    else 
    { 
     var currentRole = context.Roles.Find(role.ID); 
     context.Entry(currentRole).CurrentValues.SetValues(role); 
    } 
    context.SaveChanges(); 

} 
+0

검색하는 동안'DbSet.Add'가 전체 객체 그래프의 상태를'Added'로 변경한다는 것을 읽어야합니다. –

+0

@GertArnold 그러면 user.Roles.Add (role); 줄을 바꿔야합니다; 롤은 컬렉션이므로 추가하는 유일한 방법일까요? – Mathieu

+1

여기에 좋은 설명이 있습니다. http://msdn.microsoft.com/en-us/magazine/dn166926.aspx. 또한 리포지토리가 컨텍스트를 공유하는 경우 슬픔이 줄어들 것입니다. 작업 단위를 추가하는 것이 좋습니다. – Colin

답변

1

으로, 그것은 상황에 맞는 문제입니다. UserRepository는 db에 삽입 된 새 역할을 인식하지 못했습니다.

관련 문제