2011-11-29 7 views
1

연결이 끊긴 POCO 개체로 작업하고 있습니다.연결이 끊긴 POCO 엔터티 유지

단일 개체를 유지하면 잘 작동합니다.

관련 개체를 유지하려고 할 때 문제가 발생합니다. 예를 들어

가 : 데이터 레이어에서 오브젝트를 가져 오는

:

using (MyContext ctx = new MyContext()) 
{ 
    return ctx.Users.First(); 
} 

이 개체는 비즈니스 레이어로 돌아갑니다 거기, 내가 어떤 자식 레코드를 추가, (단지 ilustrate하기) 아래 참조 :

objectUser.Permissions.Add(new Permission()); 
objectUser.Permissions.Add(new Permission()); 

사용 권한은 사용자 권한 탐색 기능입니다.

using (MyContext ctx = new MyContext()) 
{ 
    ctx.Users.Attach(objectUser); 
    ctx.ObjectStateManager.ChangeObjectState(objectUser, System.Data.EntityState.Modified); 
    ctx.SaveChanges();      
} 

그러나 사용하여 내부의 첫 번째 줄에

, 나는 오류를 얻을 :

그리고는, 그때 내가 다시 데이터베이스에이 objectUser을 유지하려면 "같은 키가 이미 존재 가진 객체를 ObjectStateManager는 동일한 키를 가진 여러 객체를 추적 할 수 없습니다 ".

내가 잘못했는지 아는 사람이 있습니까?

개체 및 관련 개체를 유지하기 만하면됩니다.

나를 도와 주셔서 감사합니다.

루이스 구스타보


나는 엔티티를 분리하려고했지만,이 경우에 나는 모든 관련 개체를 풀어, 내가 추가/제거 할 수 있도록 나는이 관련 개체가 필요합니다.

그런 다음 데이터베이스에 다시 저장하고 싶습니다.

나는 바보 같은 건축술을하고 있습니까 ??

루이스 구스타보

답변

0

문제는 여기에 objectUser 개체가 여전히 데이터베이스에서 검색하는 데 사용되는 컨텍스트에 연결되어 있는지 것으로 보인다. 두 개의 서로 다른 컨텍스트가 정의 된이 워크 플로가 필요한 경우 objectUser을 초기 컨텍스트에서 분리해야합니다. 이를 수행하는 한 가지 방법은 objectUser 컨텍스트 개체에서 개체 추적을 해제하는 것입니다. 또는 컨텍스트에서 개체를 수동으로 분리 할 수 ​​있습니다.

using (MyContext ctx = new MyContext()) 
{ 
    //EF 4.1 - ctx.Configuration.AutoDetectChangesEnabled = false; 
    ctx.Users.MergeOption = MergeOption.NoTracking; 

    return ctx.Users.First(); 
} 

블로그 : http://blogs.msdn.com/b/dsimmons/archive/2010/01/12/ef-merge-options-and-compiled-queries.aspx

1 부 모든 MergeOption 속성에 관한 것입니다.

+0

안녕하세요 게리, 답장을 보내 주셔서 감사합니다. 문제는 엔티티를 분리 할 때 관련된 모든 객체가 느슨합니다. 엔티티와 모든 관련 객체를 가져올 수있는 방법이 있습니까? – user1071897

+0

당신은 이것을 위해 Include를 사용할 수 있어야합니다. 'return ctx.Users.Include ("Permissions"). First();' –

관련 문제