Entity Framework EF4.1 - Gespeicherte Prozedur "konnte nicht im Container gefunden werden"

7

Ich habe einen SP in meiner Datenbank. Für EF4.1 verwenden Sie die DbContext-API .

Nach dem Importieren der Funktion aus dem Datenmodell funktionieren Verweise auf die gespeicherte Prozedur in meiner Entwicklungsumgebung einwandfrei. Aber wenn es auf dem Server veröffentlicht wird, schlägt es mit einer Nachricht wie folgt fehl: Der FunctionImport 'SqlSearch' konnte nicht in dem Container 'TallyJ2Entities' gefunden werden. Alle anderen Datenzugriffe funktionieren einwandfrei.

Es scheint, dass in der Produktion einige Aspekte der EF4-Konfiguration vergessen werden.

Die Datenbanken sind identisch, und beide Server sind SQL 2008 (lokal ist Express SP1 10.50.2500, Host ist Express RTM 10.50.1600).

Ich habe sogar den EDMX-Editor direkt auf die Produktionsdatenbank gerichtet und aktualisiert. Das Ergebnis funktionierte in der Entwicklung gut, scheiterte aber genauso auf dem Server.

Andere ähnliche Fragen hier helfen nicht. Ein anderer scheint ein ähnliches Problem zu haben Link Beschreibung hier eingeben .

Irgendwelche Vorschläge?

Update: Ich habe festgestellt, dass das Problem verschwindet, wenn ich den Host im Debug-Modus deploye!

In meiner von DbContext abgeleiteten Klasse habe ich diesen Code eingefügt:

%Vor%

Als ich das findFunction -Ergebnis protokolliert habe, stellt sich heraus, dass der Server (im Release-Modus) ihn NICHT gefunden hat, während er sich in der Entwicklung befindet.

    
Glen Little 11.12.2011, 05:27
quelle

3 Antworten

18

Wenn Sie EF 4.1 und höher verwenden, ändern Sie "ObjectParameter" in "SqlParameter" und "ExecuteFunction" in "ExecuteStoreQuery" in Ihrer Datei "Context.cs".

Die "ExecuteStoreQuery" -Methode erwartet außerdem, dass Sie die Parameternamen vor dem gespeicherten Proc hinzufügen. Finde unten ein Snippet:

%Vor%

Wenn Sie eine Vorlage zum Generieren Ihres Codes verwenden, ist das folgende Snippet möglicherweise ebenfalls nützlich. I.e. Ich habe den Standard "Fluent TT" -Generator an EF 4.3 angepasst:

%Vor%     
Kwex 18.05.2012, 14:49
quelle
4

Wir haben festgestellt, dass dies auf den falschen connectionString zurückzuführen ist.

EF benötigt eine Verbindungszeichenfolge, die wie folgt aussieht:

%Vor%

Wo MyModel heißt, sollte dies mit dem Namen Ihrer .edmx-Modelldatei übereinstimmen.

Wenn Sie einen connectionString von woanders kopiert haben, sieht das so aus:

%Vor%

Beachten Sie insbesondere den Unterschied im providerName am Ende der connectionStrings.

NB Wir verwenden EF 6.1, aber ich glaube, das gilt auch für frühere Versionen. Wenn Sie Ihre Verbindungszeichenfolge korrigieren, können Sie den von den T4-Vorlagen generierten Code weiterhin verwenden. Sie müssen ObjectParameter nicht zu SqlParameter und ExecuteFunction zu ExecuteStoreQuery wechseln.

    
jksemple 09.07.2014 13:03
quelle
0

Ich glaube nicht, dass die Verbindungszeichenfolge das Problem ist. In meinem Fall kann ich die Speicherprozedur nicht aufrufen, aber ich kann Daten in meine DB schreiben. Es bedeutet, dass unsere Verbindung korrekt ist.

    
jai 02.03.2015 11:11
quelle