J'essaie de créer une webapi dans ASP.NET MVC 4. La webapi a utilisé les types Spatial Entity Framework 5 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.
Lorsque je lance ce local, cela fonctionne, mais lorsque je le publie sur Azure, cela me donne cette erreur:
Les types et fonctions spatiaux ne sont pas disponibles pour ce fournisseur car l'assembly «Microsoft.SqlServer.Types» version 10 ou supérieure est introuvable.
Quelqu'un sait comment résoudre ceci ? :)
Merci!
asp.net-mvc
entity-framework
azure
Thomas Bolander
la source
la source
Réponses:
J'ai trouvé la solution! Installez simplement le package nuget Microsoft.SqlServer.Types
Lien pour plus d'informations
la source
La réponse ci-dessus fonctionne correctement lorsque la version 11 (SQL Server 2012) de l'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 v6.1.3) est codé en dur dans son SqlTypesAssemblyLoader (la source de cette exception) pour rechercher uniquement les versions 10 et 11 de l'assembly.
Pour contourner ce problème, j'ai découvert que vous pouvez indiquer à Entity Framework quel assembly vous souhaitez utiliser comme ceci:
la source
EntityContext
classe personnalisée (qui hérite deDbContext
).SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Pour une raison quelconque, je manquais une redirection de liaison qui a résolu ce problème pour moi.
L'ajout de ce qui suit a résolu mon problème
la source
AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }
where _logger est un enregistreur NlogIl existe 2 façons de résoudre ce problème:
La deuxième façon consiste à utiliser le gestionnaire de packages NuGet et à installer
Package d'installation Microsoft.SqlServer.Types
Ensuite, suivez les notes du plugin comme ci-dessous
la source
~/
place de~/bin
. Assurez-vous également de vérifier votre chemin.J'ai également rencontré ce problème, mais le package nuget Microsoft.SqlServer.Types était déjà installé.
Ce qui a résolu le problème pour moi allait à Solution> Références> System.Data.Entity> Propriétés> Copier local et le définissant 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 du forum Windows Azure .
la source
Veuillez ajouter "dependAssembly" le fichier Web.config
Cela a fonctionné pour moi
la source
La solution pour moi était simplement d'ajouter cette ligne de code à Global.asax.cs dans
Application_Start()
:Bonne chance mes frères.
la source
Suite à un commentaire dans une réponse pour le post actuel, l'ajout de ces deux lignes (de préférence à la fonction principale) a résolu mon problème pour l'application console:
la source
Dans mon cas (une application WebForms), j'ai résolu le problème en ajoutant les lignes suivantes dans
Application_Start
leGlobal.asax
fichier.J'espère que cela aide quelqu'un.
la source
Aucune des solutions ci-dessus ne m'a fonctionné.
Vous savez quoi, cette erreur peut également être due à de faibles ressources sur le serveur . J'ai redémarré le serveur SQL et il a été résolu automatiquement.
la source
J'ai juste eu le même problème. J'utilise
EF6
et j'appelleSQL
qui a une fonction SQL qui utilise des commandes spatiales. J'ai testé cela via un test unitaire et cela a bien fonctionné. Quand je suis allé câbler maAsp.Net
solution, j'ai reçu l'erreurEn ajoutant le
NUGET
package "Microsoft.SqlServer.Types" et en ajoutantSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
auApplication_Start method
dansGlobal.asax.cs
tout a bien fonctionné.la source
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.
la source