Ich unterhalte eine Visual Studio 2008-Anwendung (Website-Projekt). Es gibt keine Möglichkeit, auf eine höhere Version von.net Framework oder eine höhere Version von Entity Framework zu aktualisieren. Wie bei vielen IT-Shops, werden die Leute, wenn es keine größeren Probleme gibt, mir nicht erlauben, größere Verbesserungen am System vorzunehmen.'System.Data.Metadata.Edm.EdmFunction' ist keine Attributklasse
Das .net-Framework ist 3.5. und die EF-Version 1.0
Ich brauche mein Programm zu ändern, so dass meine select Linq-Anweisung funktioniert
Calling a SQL User-defined function in a LINQ query
Wie Sie sagen, ich brauche gespeicherte Funktion als Teil der select-Anweisung schließen
Also habe ich die Aussage kopiert.
Ich habe stundenlang gekämpft, und ich bekomme immer Kompilation.
//..various using statement
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
//..other class
public static class EntityFunctions
{
[EdmFunction("FBLModel.Store", "SampleFunction")]
public static int SampleFunction(int param)
{
throw new NotSupportedException("Direct calls are not supported.");
}
}
Ich erhalte CS0246 Kompilierungsfehlern
Fehler: Der Typ oder Namespace-Name ‚EdmFunctionAttribute‘ konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)
Ich habe das gesamte Internet umfassen und Stackoverflow MSDN-Blog durchsucht, sucht der Namensraum korrekt
Irgendwelche Vorschläge? Danke
Ihre Ausnahme zeigt an, dass nichts die Methode direkt aufrufen soll. Das lässt mich vermuten, dass keine Methoden direkt die Methode oder möglicherweise sogar die ganze Bibliothek aufrufen und der Compiler die Referenz nicht enthält, wenn er zu einer Lösung aufbaut, da er denkt, dass er die Ausgabe "optimiert", indem er die unbenutzte Referenz ignoriert. Können Sie versuchen, einen harten Verweis zu erstellen, damit Sie sicher wissen, dass der Compiler es nicht ignoriert? z.B. Erstellen Sie eine öffentliche Eigenschaft mit dem Namen test, und holen Sie dann den Wert in Ihrem Hauptprojekt einmal, nur damit der Code sie mindestens einmal berührt und die Assembly geladen wird? –
über Ich sage der Compiler ignoriert es, aber das ist nicht genau, da die DLL immer noch in der Ausgabe enthalten sein wird. Es handelt sich eher um eine Laufzeit-Optimierung, bei der es sich um einen Bereich handelt, in dem die Assembly nie geladen wird. Wollte das nur klären :) –
Es könnte ein Problem mit den T4 Vorlagen sein. Vielleicht gehören sie zur falschen EF-Version? Gehen Sie zu 'Model.Context.tt' und prüfen Sie, ob das' using System.Data.Objects.DataClasses; 'enthalten ist. Ich habe den Hinweis von [diesem Beitrag] erhalten (https://social.msdn.microsoft.com/Forums/en-US/2c8143eb-f7cd-48d1-b67d-9789acd9e152/type-or-namespace-edmfunctionattribute-could-not- be-found-entity-framework-601? forum = adodotnettentityframework). – Diana