Ich teile das nur, weil es mich eine Weile verrückt machte, also, die Frage posten und nur für den Fall jemand beantworten läuft in die gleiche Situation.System.Data.Entity.Core.Objects.ObjectQuery 'enthält keine Definition für' EntitySet '
Ich verwendete Reflexion in einem meiner Projekte, um einen Wert von einem generischen Typ zu erhalten. Das Problem liegt nicht beim generischen Typmethodenaufruf, sondern darin, dass der tatsächliche Rückgabewert selbst ein generischer Typ ist.
Da ich weiß nicht, die generischen Typparameter im Voraus, kann ich nicht Lösungen verwenden wie unten, über das zurückgegebene Objekt:
method = method.MakeGenericMethod(typeof(SomeClass));
var result = method.Invoke(service, null);
Also, was ich tat, war, den dynamischen Typ verwendet wird, und den Eigenschaftsnamen über das zurückgegebene Objekt aufrufen.
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;
Nun, das war perfekt funktioniert gut, bis ich den Code auf eine andere Lösung zu kopieren entschieden, wo ich eine Open-Source-Erweiterungsbibliotheken für Entity Framework bin zu schaffen (EntityExtensions).
Die gleiche Codezeile, die in der vorherigen Lösung funktioniert, funktioniert nicht mehr in der neuen Lösung !!! Es meldet: System.Data.Entity.Core.Objects.ObjectQuery 'enthält keine Definition für' EntitySet '
Was mich verrückt wurde ist, ich bin in der Lage, die tatsächliche Eigenschaft im Debugger anzuzeigen! Eine Eigenschaft mit demselben Namen ist vorhanden, aber es wird einfach eine Ausnahme ausgelöst, dass diese Eigenschaft nicht auf dem dynamischen Objekt vorhanden ist!
Ich schreibe die Antwort als Antwort statt hier nur für die Klarheit.