J'essaie de créer une webapi dans ASP.NET MVC 4. La webapi utilisait les types Entity Framework 5 Spatial et j'ai écrit un code très simple.
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
La zone contient DbGeometry.
Quand je lance ce local, ça marche, mais quand je le publie sur Azure, ça me donne cette erreur:
Les types et les fonctions spatiaux ne sont pas disponibles pour ce fournisseur car la version 10 ou supérieure de l'assembly 'Microsoft.SqlServer.Types' ou une version ultérieure était introuvable.
Quelqu'un sait comment résoudre ceci ? :)
Merci!
J'ai trouvé la solution! Il suffit d'installer le package de nuget Microsoft.SqlServer.Types
PM> Install-Package Microsoft.SqlServer.Types
Le answer above fonctionne correctement lorsque la version 11 (SQL Server 2012) de Assembly peut être utilisée.
J'ai eu un problème avec cela car ma solution a d'autres dépendances sur la version 13 (SQL Server 2016) du même assembly. Dans ce cas, notez qu'Entity Framework (au moins la version 6.1.3) est codé en dur dans son SqlTypesAssemblyLoader (source de cette exception) pour rechercher uniquement les versions 10 et 11 de Assembly.
Pour résoudre ce problème, j’ai découvert que vous pouvez indiquer à Entity Framework quel assembleur vous souhaitez utiliser, par exemple:
SqlProviderServices.SqlServerTypesAssemblyName =
"Microsoft.SqlServer.Types, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
Pour une raison quelconque, il me manquait une redirection de liaison qui corrigeait ce problème pour moi.
L'ajout de ce qui suit a résolu mon problème
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>
Il y a 2 façons de résoudre ce problème:
La deuxième façon consiste à utiliser le gestionnaire de paquets NuGet et à l’installer.
Package d'installation Microsoft.SqlServer.Types
Suivez ensuite les notes du plugin ci-dessous
Pour déployer une application qui utilise des types de données spatiales sur une machine "Types de CLR système pour SQL Server" n'est pas installé sur votre ordinateur également besoin de déployer l’Assembly natif SqlServerSpatial110.dll. Tous les deux Les versions x86 (32 bits) et x64 (64 bits) de cet assemblage ont été ajouté à votre projet sous SqlServerTypes\x86 et SqlServerTypes\x64 sous-répertoires. L'assemblée native msvcr100.dll est également inclus dans le cas où le runtime C++ n'est pas installé.
Vous devez ajouter du code pour charger le bon assemblage à runtime (selon l'architecture actuelle).
Applications ASP.NET Pour les applications ASP.NET, ajoutez la ligne suivante de code à la méthode Application_Start dans Global.asax.cs:
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
Applications de bureau Pour les applications de bureau, ajoutez la ligne suivante de code à exécuter avant toute opération spatiale:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
J'ai également rencontré ce problème, mais le package de nuget Microsoft.SqlServer.Types était déjà installé.
Ce qui a résolu le problème pour moi, ce fut d'aller dans Solution> Références> System.Data.Entity> Propriétés> Copier local et de le définir sur True.
Remarque: Copy Local pour Microsoft.SqlServer.Types était déjà défini sur true et, même si le problème concernait System.Data.Entity, le message d'erreur concernait toujours Microsoft.SqlServer.Types.
La solution provient de Forum Windows Azure .
La solution pour moi consistait simplement à ajouter cette ligne de code à Global.asax.cs dans Application_Start()
:
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
Bonne chance mes frères.
S'il vous plaît ajouter "dependAssembly" le fichier Web.config
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Cela a fonctionné pour moi
Aucune des solutions ci-dessus ne m'a fonctionné.
Vous savez quoi, cette erreur peut aussi être due à ressources insuffisantes sur le serveur . J'ai redémarré le serveur SQL et le problème a été résolu automatiquement.
Dans mon cas, une chaîne de connexion mal composée a causé cela. Vérifiez si votre chaîne de connexion est correctement composée.
Je viens d'avoir le même problème. J'utilise EF6
et appelle SQL
qui a une fonction SQL qui utilise des commandes spatiales. J'ai testé cela à travers un test unitaire et cela a bien fonctionné. Quand je suis allé câbler ma solution Asp.Net
j'ai reçu l'erreur
Les types et fonctions spatiaux ne sont pas disponibles pour ce fournisseur parce que la version 10 ou supérieure de l'Assembly 'Microsoft.SqlServer.Types' Ne peut être trouvé.
En ajoutant le package NUGET
"Microsoft.SqlServer.Types" et en ajoutant SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
au Application_Start method
dans Global.asax.cs
, tout s'est bien passé.
Après un commentaire dans une réponse au message en cours, l’ajout de ces deux lignes (de préférence à la fonction principale) a résolu mon problème pour l’application console:
SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);