J'ai un problème. Je ne parviens pas à ajouter une migration à mon projet ASP.NET WebAPI 2. Je reçois une erreur:
"Les types et fonctions spatiales ne sont pas disponibles pour ce fournisseur car la version 10 ou supérieure de l'assembly 'Microsoft.SqlServer.Types' est introuvable."
Je sais qu'il y a plusieurs questions et réponses à ce sujet, comme:
Mais! Le problème est...
C'est l'erreur complète lorsque j'essaie d'exécuter par exemple Add-Migration v002 :
System.InvalidOperationException: les types et fonctions spatiales ne sont pas disponibles pour ce fournisseur car la version 10 ou supérieure de l'assembly "Microsoft.SqlServer.Types" est introuvable.
en System.Data.Entity.SqlServer.SqlTypesAssemblyLoader.GetSqlTypesAssembly () en System.Data.Entity.SqlServer.SqlSpatialServices.GeographyFromText (String wellKnownText) en System.Data.Entity.Spatial.DbextTKT ) en System.Data.Entity.Migrations.Model.ColumnModel.CreateDefaultValue ()
en System.Data.Entity.Migrations.Model.ColumnModel..ctor (PrimitiveTypeKind type, TypeUsage typeUsage) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildColumnModel (EdmProperty TypeUsageTypeUtage , IDictionary2 annotations) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildColumnModel(EdmProperty property, ModelMetadata modelMetadata, IDictionary
2 annotations)
en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer. <> c__DisplayClass2e3.b__2df (EdmProperty p) en System.Data.Entity.Utilities.IEnumerableExtensions.Each [T] (IEnumerable1 ts, Action
1 action) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.BuildCreateTableOperation (EntitySet entitySet, ModelMetadata modelMetadata) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.b__194 (EntitySet.EnterelSenelableEnableSetelEnableSetSelect2.MoveNext()
1..ctor (IEnumerable
en System.Collections.Generic.List1 collection)
1 source) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff (source ModelMetadata, cible ModelMetadata, Lazy
en System.Linq.Enumerable.ToList[TSource](IEnumerable1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion) en System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy
1 modificationCommandTreeGenerator , MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion) en System.Data.Entity.Migrations.DbMigrator.Scaffold (String migrationName, String namespace, Boolean ignoreChanges) et System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold. e, Boolean ignoreChanges) en System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold (MigrationScaffolder scaffolder) en System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run () en System.AppDomain.DoCallain CrossAppDomainDelegate callBackDelegate) en System.AppDomain.DoCallBack (CrossAppDomainDelegate callBackDelegate)
en System.Data.Entity.Migrations.Design.ToolingFacade.Run (coureur BaseRunner) en System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold (String migrationName, String language, String rootNamespace, Boolean ignoreChanges) fr System.Data.Entity.Migrations.AddMigrationCommand.Execute (String name, Boolean force, Boolean ignoreChanges) en System.Data.Entity.Migrations.AddMigrationCommand. <> c__DisplayClass2. <. ctor> b__0 () fr System.Data.Entity .Migrations.MigrationsDomainCommand.Execute (commande Action)
Après de nombreuses recherches, je viens d'installer "Microsoft System CLR Types for SQL Server 2012" à partir de:
A fonctionné comme un charme!
Assurez-vous que vous ne manquez pas de redirection de liaison
<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>
Cela a fonctionné pour moi.
Ajoutez ceci au web.config> system.webServer >> runtime >> assemblyBinding node
<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>
le problème peut être "virtuel". Vous devez avoir SqlServerSpatial140.dll dans le dossier bin au moment où vous exécutez la commande add-migration. Copiez simplement le fichier .dll dans le bac à des fins de développement et remplacez manuellement la version (x86/x64) pendant le déploiement. Sql Server (2012+) a déjà l'assembly installé.