Próbuję zrobić webapi w ASP.NET MVC 4. Webapi użyło typów Entity Framework 5 Spatial i napisałem bardzo prosty kod.
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
Obszar zawiera DbGeometry.
Kiedy uruchamiam ten lokalny, działa, ale kiedy publikuję go na lazurze, wyświetla mi się ten błąd:
Typy i funkcje przestrzenne nie są dostępne dla tego dostawcy, ponieważ nie można znaleźć zestawu „Microsoft.SqlServer.Types” w wersji 10 lub nowszej.
Czy ktoś wie, jak to rozwiązać? :)
Dzięki!
asp.net-mvc
entity-framework
azure
Thomas Bolander
źródło
źródło
Odpowiedzi:
Znalazłem rozwiązanie! Wystarczy zainstalować pakiet NuGet Microsoft.SqlServer.Types
Link, aby uzyskać więcej informacji
źródło
Powyższa odpowiedź działa poprawnie, gdy można użyć wersji 11 (SQL Server 2012) zestawu.
Miałem z tym problem, ponieważ moje rozwiązanie ma inne zależności w wersji 13 (SQL Server 2016) tego samego zestawu. W tym przypadku należy zauważyć, że Entity Framework (co najmniej w wersji 6.1.3) jest zakodowana na stałe w jego SqlTypesAssemblyLoader (źródło tego wyjątku), aby szukać tylko wersji 10 i 11 zestawu.
Aby obejść ten problem, odkryłem, że możesz powiedzieć Entity Framework, którego zestawu chcesz użyć w następujący sposób:
źródło
EntityContext
klasy niestandardowej (która dziedziczyDbContext
).SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Z jakiegoś powodu brakowało mi przekierowania wiążącego, które rozwiązało ten problem.
Dodanie następującego rozwiązania rozwiązało mój problem
źródło
AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }
gdzie _logger jest rejestrator nlogIstnieją 2 sposoby, aby to naprawić:
Drugim sposobem jest użycie menedżera pakietów NuGet i zainstalowanie
Zainstaluj pakiet Microsoft.SqlServer.Types
Następnie postępuj zgodnie z uwagami dotyczącymi wtyczki, jak poniżej
źródło
~/
zamiast tego moja ścieżka rozwoju była~/bin
. Pamiętaj, aby sprawdzić również swoją ścieżkę.Również napotkałem ten problem, ale pakiet nuget Microsoft.SqlServer.Types został już zainstalowany.
Rozwiązaniem dla mnie było przejście do opcji Rozwiązanie> Referencje> System.Data.Entity> Właściwości> Kopiuj lokalnie i ustawienie wartości True.
Uwaga: opcja Kopiuj lokalnie dla Microsoft.SqlServer.Types została już ustawiona na wartość true i mimo że problem dotyczył System.Data.Entity, komunikat o błędzie nadal dotyczył Microsoft.SqlServer.Types.
Rozwiązanie pochodzi z forum Windows Azure .
źródło
Dodaj plik „dependAssembly” do pliku Web.config
To zadziałało dla mnie
źródło
Rozwiązaniem dla mnie było po prostu dodanie tej linii kodu do Global.asax.cs w
Application_Start()
:Powodzenia bracia.
źródło
Po komentarzu w odpowiedzi na bieżący post, dodanie tych dwóch wierszy (najlepiej do głównej funkcji) rozwiązało mój problem z aplikacją konsolową:
źródło
W moim przypadku (a WebForms app) I rozwiązać problem dodając następujące wiersze w
Application_Start
tegoGlobal.asax
pliku.Mam nadzieję, że to komuś pomoże.
źródło
Żadne z powyższych rozwiązań nie zadziałało.
Wiesz co, ten błąd może być również spowodowany niskimi zasobami na serwerze . Zrestartowałem serwer SQL i problem został rozwiązany automatycznie.
źródło
Po prostu miałem ten sam problem. Używam
EF6
i wzywam,SQL
który ma funkcję SQL, która używa poleceń przestrzennych. Przetestowałem to za pomocą testu jednostkowego i działało dobrze. Kiedy poszedłem podłączyć swojeAsp.Net
rozwiązanie, otrzymałem błądDodając
NUGET
pakiet „Microsoft.SqlServer.Types” i dodanieSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
doApplication_Start method
wGlobal.asax.cs
wszystko działało dobrze.źródło
W moim przypadku spowodował to źle skomponowany ciąg połączenia. Sprawdź, czy parametry połączenia są poprawnie skomponowane.
źródło