Estou tentando fazer um webapi na ASP.NET MVC 4. O webapi usou o Entity Framework 5 Spatial types e escrevi um código muito simples.
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
A área contém DbGeometry.
Quando eu executo este local, ele funciona, mas quando eu o publico no azure, ele me mostra este erro:
Tipos e funções espaciais não estão disponíveis para este provedor porque o assembly 'Microsoft.SqlServer.Types' versão 10 ou superior não foi encontrado.
Alguém sabe como resolver isso ? :)
Obrigado!
asp.net-mvc
entity-framework
azure
Thomas Bolander
fonte
fonte
Respostas:
Encontrei a solução! Basta instalar o pacote nuget Microsoft.SqlServer.Types
Link para mais informações
fonte
A resposta acima funciona bem quando a versão 11 (SQL Server 2012) do assembly pode ser usada.
Tive um problema com isso porque minha solução tem outras dependências na versão 13 (SQL Server 2016) do mesmo assembly. Nesse caso, observe que o Entity Framework (pelo menos v6.1.3) está codificado em seu SqlTypesAssemblyLoader (a fonte dessa exceção) para procurar apenas as versões 10 e 11 do assembly.
Para contornar isso, descobri que você pode dizer ao Entity Framework qual assembly deseja usar assim:
fonte
EntityContext
classe personalizada (que herda foraDbContext
).SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Por algum motivo, estava faltando um redirecionamento de ligação que corrigiu esse problema para mim.
Adicionar o seguinte corrigiu meu problema
fonte
AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }
onde _logger é um registrador de NlogExistem 2 maneiras de corrigir isso:
A segunda maneira é usar o gerenciador de pacotes NuGet e instalar
Install-Package Microsoft.SqlServer.Types
Em seguida, siga as notas do plugin como abaixo
fonte
~/
vez de~/bin
. Certifique-se de verificar seu caminho também.Eu também encontrei esse problema, mas o pacote nuget Microsoft.SqlServer.Types já estava instalado.
O que resolveu o problema para mim foi ir para Solução> Referências> System.Data.Entity> Propriedades> Copiar local e defini-lo como True.
Observação: Copiar local para Microsoft.SqlServer.Types já estava definido como verdadeiro e, embora o problema fosse com System.Data.Entity, a mensagem de erro ainda era sobre Microsoft.SqlServer.Types.
A solução vem do fórum do Windows Azure .
fonte
Adicione "dependenteAssembly" ao arquivo Web.config
Isso funcionou para mim
fonte
A solução para mim foi apenas adicionar esta linha de código a Global.asax.cs em
Application_Start()
:Boa sorte meus irmãos.
fonte
Seguindo um comentário em uma resposta para a postagem atual, adicionar essas duas linhas (de preferência à função principal) resolveu meu problema para o aplicativo de console:
fonte
No meu caso (um aplicativo WebForms) resolvi o problema adicionando as seguintes linhas no
Application_Start
doGlobal.asax
arquivo.Eu espero que isso ajude alguém.
fonte
Nenhuma das soluções acima me funcionou.
Você sabe o quê, esse erro também pode ser devido a poucos recursos no servidor . Reiniciei o servidor SQL e ele foi resolvido automaticamente.
fonte
Só tive o mesmo problema. Estou usando
EF6
e chamando oSQL
que tem uma função SQL que usa comandos espaciais. Eu testei isso por meio de um teste de unidade e funcionou bem. Quando fui conectar minhaAsp.Net
solução, recebi o erroAo adicionar os
NUGET
"Microsoft.SqlServer.Types" pacote e adicionandoSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
aoApplication_Start method
emGlobal.asax.cs
tudo funcionou bem.fonte
No meu caso, uma string de conexão mal composta causou isso. Verifique se sua string de conexão está composta corretamente.
fonte