2015-12-10 16 views
25

Meine Anwendung stürzt mit dem folgenden Fehler ab, wenn ich in der DB speichern.Entity Framework kann Datenbank nicht aktualisieren

In der DLL 'SqlServerSpatial110.dll' konnte kein Einstiegspunkt namens 'SetClrFeatureSwitchMap' gefunden werden.

Dieser Fehler wurde gestern Nachmittag nach einem Windows Update und PC Reboot gestartet. Die DLL wird im Projekt nicht referenziert und befindet sich nicht im Ordner bin.

Ich benutze EF5 und ich kann mit der DB verbinden und Daten ziehen, aber wenn ich ObjectContext.SaveChanges() aufrufen, tritt der Fehler auf.

Die Anwendung verwendet keine Geometrie, also habe ich keine Ahnung, woher das kommt.

+0

Bisher habe ich SP3 für SQL 2008 R2 installiert, installierte SQL 2014, löschte alles im Zusammenhang mit SqlServerSpatial110.dll. Ich habe den Code auf einem anderen PC getestet und hatte die gleichen Probleme. –

Antwort

55

ich hatte das gleiche Problem, und es fest in die web.config meiner Bewerbung die folgenden Zeilen durch Zusatz:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" /> 
     <bindingRedirect oldVersion="1.0.0.0-11.0.0.0" newVersion="10.0.0.0" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Dies zwingt das EntityFramework, die Version 10 der SqlServer.Types.dll zu verwenden, die anscheinend nicht über den Geometrie-Typ verfügt.

+1

Dies ist die eigentliche Antwort, funktioniert wie ein Charme! Danke – veljkoz

+0

arbeitete für mich auch! Fantastische Antwort, ohne dass SP3 für meine App mit einer älteren EF-Version deinstalliert werden muss. Vielen Dank! – SheldonH

+1

Dies muss im -Element hinzugefügt werden, und es funktioniert einwandfrei. –

3

Also, wenn ich die folgende Codezeile zum Start der Anwendung hinzufügen, wird es die SQL 2014-Version der Microsoft.SqlServer.Types-Assembly verwenden, die nicht das oben angegebene Problem zu haben scheint.

System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"; 

Dies ist für Computer geeignet, auf denen SQL Server 2014 SDK installiert ist.

Ich habe auch einen Fehler mit Microsoft hier vorgelegt:

https://connect.microsoft.com/SQLServer/Feedback/Details/2139143

0

Aus meiner Erfahrung mit diesem Fehler geschieht dies nur mit Entity Framework 5 Targeting .NET 4 (im Gegensatz zu .NET 4.5) bei Verwendung eines SQL Server mit Service Pack 3. Weitere Informationen zur möglichen Ursache here. Lösungen, die für mich gearbeitet:
1) KdBoer ist fix, oder
2) zu Entity die Anwendung Update-Framework 6

+0

Unsere Anwendungen laufen auf .NET 4.5 (EF 5 though), und wir haben dieses Problem immer noch. Da EF fragil ist, werden wir das Update auf die neue Version nicht riskieren, daher ist die Antwort von KdBoer der richtige Weg. – veljkoz

+0

Danke, veljkoz. Ich habe diesen Vorschlag entfernt. – Sifford

0

Ich weiß, ich bin spät zur Party, aber ich hatte das gleiche Problem mit MSSQL 2012 und Es war wirklich nervig. I konnte keine Abfrage in Tabellen mit Spacial-Spalte (n) ausführen. Es war ein bisschen schwierig. Ich fasse meinen Ansatz zusammen, nur für andere,

Der Grund ist wegen einiger inconsistency zwischen SP3 und CLR. Der beste Weg dazu ist die Überprüfung C:\Windows\assembly und wenn Sie einige Microsoft.SqlServer.Types hier sehen, müssen Sie sie wieder entfernen und installieren.Nun, sie zu entfernen ist ein bisschen schwierig:

  1. Möglicherweise uninstall alle SQL Server-Updates von Windows Update, ich habe gerade diese für Service Packs 1,2,3

  2. Zum diesem Ort in registery HKLM\SOFTWARE\Classes\Installer\Assemblies\Globalhere

  3. Delete all keys with the nameMicrosoft.SqlServer.Types, aber vor, dass eine Sicherung der Registrierung nehmen Vorsicht not mess die Registrierung auf.

  4. Run Developer Command Prompt als Administrator und run this commandgacutil -i Microsoft.SqlServer.Types

  5. Reparatur die ursprüngliche Version von SQL Server, die Sie bereits haben.

Schließlich konnte ich jede Abfrage auf einer Tabelle auch mit Geometry (Spatial) Daten auszuführen.

Ich hoffe, das hilft einigen Menschen.

Verwandte Themen