2017-07-14 3 views
0

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

enter image description here

Irgendwelche Vorschläge? Danke

+0

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? –

+0

ü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 :) –

+0

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

Antwort

0

Das Problem hier ist, dass Sie eine in Konflikt stehende Referenz mit Ihren Namespaces haben.

Der Namespace System.Data.Metadata.Edm enthält eine Klasse namens EdmFunction. Der System.Data.Objects.DataClasses-Namespace enthält eine Klasse namens EdmFunctionattribute (die Sie verwenden möchten).

Aus irgendeinem Grund verweist Ihr Code auf die EdmFunction-Klasse. Versuchen Sie, den Namespace-Import für System.Data.Metadata.Edm zu entfernen, da Sie dies wahrscheinlich nicht importieren wollten.

Verwandte Themen