간단한 이해로 해결할 수 있다고 생각되는 문제가 있습니다. Entity Framework 5에서 코드를 먼저 사용하고 POCO를 사용하고 있습니다. 모든 POCO 객체에 대해 모든 탐색 속성이 올바르게 구성되었습니다 (가상). 문제는 개체 (POCO)를 쿼리 한 다음 해당 POCO를 결과로 반환 할 때 발생합니다. POCO에 대한 모든 탐색 속성은 null'ed됩니다네비게이션 속성이 null 인 EF5 및 분리 된 POCO
class PocoParent { // all of these are properties (get/set)
public int Id;
public string ParentProperty;
public virtual PocoChild NavProperty;
}
class PocoChild {
public int Id;
public int ParentId;
public string Name;
public virtual PocoParent Parent;
}
을 내 쿼리 처리하는 저장소 클래스 내부의
...
var children = repo.GetAllChildrenFor(queriedParent.Id);
...
지금 결과를 사용 :
IEnumerable<PocoChildren> GetAllChildrenFor(int parentId) {
using(Context db = new Context()) {
var pcs = db.PocoParents.Where(p => p.Id == parentId);
return pcs;
}
}
은 이제 저장소를 사용을 리포지토리에서 다음과 같이 오류가 발생합니다.
...
foreach(child in children) {
if(child.Parent.NavProperty == "null") { !!! Exception: child.Parent ObjectContext already disposed
}
}
...
(어떻게 POCO 객체를 분리하기 위해) ObjectContext를 처리 할 수 있지만 적어도 한 레벨의 탐색 속성을 유지할 수 있습니까? 나는 끝없이 해결책을 찾았지만 해결책을 모으는 방법에 관해서는 모두 상반되는 것처럼 난처하게되었다.
나는 다음에 저장소에서 쿼리를 변경한다면 --- 요점을 되풀이 ---- 아래의 답을 , 상기 모든 enities을 반환
IEnumerable<PocoChildren> GetAllChildrenFor(int parentId) {
using(Context db = new Context()) {
var pcs = db.PocoParents.Include(p => p.Select(prop => prop.Parent).Where(p => p.Id == parentId);
return pcs;
}
}
겠습니까 그들은 것이다 null이 아닌 .Parent 속성이나 내가 지정한 모든 속성을 포함합니까?
감사합니다. 지금은 이해할 수 있습니다. 나는 당신이 그것을 확인하는 것을 원하지 않는다면 평가를 위해 맨 아래에 나의 질문을 다시 썼다. –
나는 항상 Include라는 람다 버전에 불운을 겪었다. 그래서 저는 그것을 다음과 같이 작성합니다 : ... 포함 ("부모"). 어디에 ... 그렇지 않으면, 네가 가지고 있다고 생각해. –