web-dev-qa-db-fra.com

Entity Framework ne peut pas mettre à jour la base de données

Mon application se bloque avec l'erreur suivante chaque fois que j'enregistre dans la base de données.

Impossible de trouver un point d'entrée nommé "SetClrFeatureSwitchMap" dans DLL "SqlServerSpatial110.dll").

Cette erreur a commencé hier après-midi après une mise à jour Windows et un redémarrage du PC. La DLL n'est pas référencée dans le projet et ne se trouve pas dans le dossier bin.

J'utilise EF5 et je peux me connecter à la base de données et extraire des données mais lorsque j'appelle ObjectContext.SaveChanges (), l'erreur se produit.

L'application n'utilise pas de géométrie, donc je n'ai aucune idée d'où cela vient.

33
Atron Seige

J'ai eu le même problème et l'ai résolu en ajoutant les lignes suivantes au web.config de mon application:

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

Cela oblige EntityFramework à utiliser la version 10 de SqlServer.Types.dll, qui n'a apparemment pas le type Geometry.

69
KdBoer

Donc, si j'ajoute la ligne de code suivante au démarrage de l'application, elle utilisera la version SQL 2014 de l'assembly Microsoft.SqlServer.Types qui ne semble pas avoir le problème indiqué ci-dessus.

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

C'est très bien pour les machines sur lesquelles le SDK SQL Server 2014 est installé.

J'ai également soumis un bug avec Microsoft ici:

https://connect.Microsoft.com/SQLServer/Feedback/Details/213914

4
jon antoine

Je sais que je suis en retard à la fête, mais j'ai eu le même problème avec MSSQL 2012 et c'était vraiment ennuyeux. I n'a pas pu exécuter de requête dans les tables avec des colonnes spatiales. C'était un peu délicat. Je résume mon approche, juste au cas où pour d'autres,

La raison en est à cause de certains incohérence entre SP3 et CLR. Le meilleur moyen est de vérifier C:\Windows\Assembly et si vous en voyez Microsoft.SqlServer.Types ici, vous devez les supprimer et les réinstaller. Eh bien, les supprimer est un peu délicat:

  1. Peut-être désinstaller toutes les mises à jour du serveur SQL à partir de la mise à jour Windows, je viens de le faire pour les Service Packs 1,2,3

  2. Accédez à cet emplacement dans le registre HKLM\SOFTWARE\Classes\Installer\Assemblies\Globalici

  3. Supprimer toutes les clés avec le nomMicrosoft.SqlServer.Types, mais avant cela, effectuez une sauvegarde du registre Veillez à ne pas gâcher le registre.

  4. Courir Developer Command Prompt en tant qu'administrateur et exécutez cette commandegacutil -i Microsoft.SqlServer.Types

  5. Réparez la version d'origine de SQL Server que vous possédez déjà.

Enfin, j'ai pu exécuter n'importe quelle requête sur n'importe quelle table même avec des données de géométrie (spatiale).

J'espère que cela aide certaines personnes.

0
mohsen hs

D'après mon expérience avec cette erreur, cela ne se produit qu'avec Entity Framework 5 ciblant .NET 4 (par opposition à .NET 4.5) lors de l'utilisation de SQL Server avec SQL Server Service Pack 3. Plus d'informations sur la cause racine possible ici . Solutions qui ont fonctionné pour moi:
1) Correctif de KdBoer, ou
2) Mettre à jour l'application vers Entity Framework 6

0
Sifford