잠시 동안 나를 미치게했기 때문에이 정보를 공유하고 있습니다. 따라서 누군가를 위해서 질문과 답변을 게시하고 있습니다. 같은 상황에 처한다.System.Data.Entity.Core.Objects.ObjectQuery '에'EntitySet '에 대한 정의가 없습니다.
내 프로젝트에서 리플렉션을 사용하여 제네릭 형식의 값을 가져 왔습니다. 제네릭 형식 메서드 호출에 문제가있는 것이 아니라 실제 반환 값 자체가 제네릭 형식이라는 점입니다. 나는 사전에 제네릭 형식 매개 변수를 알 수 없기 때문에
, 나는 반환 된 개체를 통해, 아래와 같은 솔루션을 사용할 수 없습니다
method = method.MakeGenericMethod(typeof(SomeClass));
var result = method.Invoke(service, null);
그래서, 내가 한 것은이었다, 동적 유형을 사용하여, 반환 된 객체에 대한 속성 이름 호출. 내가 엔티티 프레임 워크에 대한 오픈 소스 확장 라이브러리 (EntityExtensions)를 만드는거야 다른 솔루션을 통해 코드를 복사하기로 결정 때까지 지금
var method = octx.GetType().GetMethods().First(x => x.Name == nameof(octx.CreateObjectSet)
&& x.DeclaringType == typeof(ObjectContext));
var generic = method.MakeGenericMethod(type);
dynamic value = generic.Invoke(octx, null);// => This is the generic typed return value.
// below, Using dynamic will work, with the pitfal of no compiler checks
EntitySet set = value.EntitySet;
, 즉 완벽하게 잘 작동했다.
이전 솔루션과 동일한 코드 줄이 더 이상 새로운 솔루션에서 작동하지 않습니다. 그것은보고합니다 : System.Data.Entity.Core.Objects.ObjectQuery '에 대한 정의가 포함되어 있지 않습니다'EntitySet '
나를 미치게 한 것은 디버거에서 실제 속성을 볼 수 있습니다! 동일한 이름을 가진 속성이 있지만 동적 객체에이 속성이 없다는 것에 대한 예외가 발생합니다.
나는 답을 명확하게하기 위해 답으로 쓰고 있습니다.