Ich versuche, ein Webapi in ASP.NET MVC 4 zu erstellen. Das Webapi verwendete Entity Framework 5 Spatial-Typen und ich habe einen sehr einfachen Code geschrieben.
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
Der Bereich enthält DbGeometry.
Wenn ich dieses lokale System ausführe, funktioniert es, aber wenn ich es in Azure veröffentliche, wird folgende Fehlermeldung angezeigt:
Räumliche Typen und Funktionen sind für diesen Anbieter nicht verfügbar, da die Assembly 'Microsoft.SqlServer.Types' Version 10 oder höher nicht gefunden wurde.
Weiß jemand, wie man das löst? :) :)
Vielen Dank!
asp.net-mvc
entity-framework
azure
Thomas Bolander
quelle
quelle
Antworten:
Ich habe die Lösung gefunden! Installieren Sie einfach das Nuget-Paket Microsoft.SqlServer.Types
Link für weitere Informationen
quelle
Die obige Antwort funktioniert einwandfrei, wenn Version 11 (SQL Server 2012) der Assembly verwendet werden kann.
Ich hatte ein Problem damit, da meine Lösung andere Abhängigkeiten von Version 13 (SQL Server 2016) derselben Assembly aufweist. Beachten Sie in diesem Fall, dass Entity Framework (mindestens Version 6.1.3) in seinem SqlTypesAssemblyLoader (der Quelle dieser Ausnahme) fest codiert ist, um nur nach den Versionen 10 und 11 der Assembly zu suchen.
Um dies zu umgehen, können Sie Entity Framework mitteilen, welche Assembly Sie wie folgt verwenden möchten:
quelle
EntityContext
Klasse eingefügt (die erbtDbContext
).SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Aus irgendeinem Grund fehlte mir eine verbindliche Weiterleitung, die dieses Problem für mich behoben hat.
Das Hinzufügen des Folgenden hat mein Problem behoben
quelle
AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }
Computer lautet , können Sie verwenden, wo _logger ein Nlog-Logger istEs gibt zwei Möglichkeiten, dies zu beheben:
Die zweite Möglichkeit besteht darin, den NuGet-Paketmanager zu verwenden und zu installieren
Installationspaket Microsoft.SqlServer.Types
Folgen Sie dann den folgenden Plugin-Hinweisen
quelle
~/
anstelle von~/bin
. Überprüfen Sie auch Ihren Pfad.Ich bin auch auf dieses Problem gestoßen, aber das Nuget-Paket Microsoft.SqlServer.Types wurde bereits installiert.
Was das Problem für mich gelöst hat, war, zu Lösung> Referenzen> System.Data.Entity> Eigenschaften> Lokal kopieren zu gehen und es auf True zu setzen.
Hinweis: Copy Local für Microsoft.SqlServer.Types wurde bereits auf true gesetzt, und obwohl das Problem bei System.Data.Entity lag, handelte es sich bei der Fehlermeldung immer noch um Microsoft.SqlServer.Types.
Die Lösung stammt aus dem Windows Azure-Forum .
quelle
Bitte fügen Sie der Datei "Web.config" "abhängige Baugruppe" hinzu
Das hat bei mir funktioniert
quelle
Die Lösung für mich bestand darin, diese Codezeile zu Global.asax.cs hinzuzufügen
Application_Start()
:Viel Glück, meine Brüder.
quelle
Nach einem Kommentar in einer Antwort für den aktuellen Beitrag löste das Hinzufügen dieser beiden Zeilen (vorzugsweise zur Hauptfunktion) mein Problem für die Konsolen-App:
quelle
Keine der oben genannten Lösungen hat mir geholfen.
Weißt du was? Dieser Fehler kann auch auf geringe Ressourcen auf dem Server zurückzuführen sein . Ich habe SQL Server neu gestartet und es wurde automatisch behoben.
quelle
In meinem Fall (einer WebForms-App) habe ich das Problem gelöst, indem ich die folgenden Zeilen in
Application_Start
dieGlobal.asax
Datei eingefügt habe .Ich hoffe es hilft jemandem.
quelle
Hatte gerade das gleiche Problem. Ich verwende
EF6
und rufeSQL
eine SQL-Funktion auf, die räumliche Befehle verwendet. Ich habe dies durch einen Unit-Test getestet und es hat gut funktioniert. Als ich meineAsp.Net
Lösung verkabelte, erhielt ich den FehlerDurch Hinzufügen des
NUGET
Pakets "Microsoft.SqlServer.Types" und HinzufügenSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
zu demApplication_Start method
inGlobal.asax.cs
alles funktionierte gut.quelle
In meinem Fall hat dies eine schlecht zusammengesetzte Verbindungszeichenfolge verursacht. Überprüfen Sie, ob Ihre Verbindungszeichenfolge richtig zusammengesetzt ist.
quelle