Po pobraniu EF6 przez nuget i próbie uruchomienia mojego projektu zwraca następujący błąd:
Nie znaleziono dostawcy Entity Framework dla dostawcy ADO.NET o niezmiennej nazwie „System.Data.SqlClient”. Upewnij się, że dostawca jest zarejestrowany w sekcji „entityFramework” pliku konfiguracyjnego aplikacji. Aby uzyskać więcej informacji, zobacz http://go.microsoft.com/fwlink/?LinkId=260882
entity-framework
Fernando Vellozo
źródło
źródło
providers
i innychprovider
rzeczy, więc rozważ jego usunięcie?public BaseStorage(): base ("RaptorDB") {}
, wywołuję konstruktor , BaseStorage () dziedziczy po DbContext w EF5 wszystko działało idealnie, jeszcze nie w EF6.Odpowiedzi:
Właśnie wpadłem na ten sam problem i wygląda na to, że EntityFramework, chociaż zainstalowany z NuGet Package Manager nie został poprawnie zainstalowany w projekcie.
Udało mi się to naprawić, uruchamiając następujące polecenie w konsoli Menedżera pakietów :
źródło
-Pre
opcji powiedz nugetowi, aby instalował pakiety w wersji wstępnej. Nie polecam go używać. Mam podobny błąd, ale rozwiązaniem było po prostu zainstalowanie EntityFramework w projekcie hosta. Zainstalowałem go w bibliotece klas, ale nie w głównym projekcie (internet / konsola / cokolwiek innego),EntityFramework.SqlServer.dll
do folderu Debug - problem rozwiązany.Dodano EF do projektu biblioteki klas. Musisz także dodać go do projektu, który się do niego odwołuje (aplikacja konsolowa, witryna internetowa itp.).
źródło
EntityFramework.SqlServer.dll
się, że jest kopiowany do katalogu bin. Dodanie silnego odwołania może zepsuć architekturę (jeśli zbudowałeś wiele warstw, zestaw wykonawczy najwyższego poziomu nie powinien nawet wiedzieć o EF). Zamiast tego możesz upewnić się, że dostawca programu SQL Server został skopiowany. Zobacz na przykład stackoverflow.com/a/19130718/870604Nie musisz instalować Entity Framework w aplikacji konsoli, wystarczy dodać odwołanie do zestawu EntityFramework.SqlServer.dll. Możesz skopiować ten zespół z projektu biblioteki klas, który korzysta z Entity Framework, do folderu LIB i dodać do niego odwołanie.
W podsumowaniu:
Mam nadzieję, że to pomoże.
źródło
Możesz także zobaczyć ten komunikat, jeśli zapomnisz dołączyć „EntityFramework.SqlServer.dll”.
Wygląda na nowo dodany plik w EF6. Początkowo nie umieściłem go w moim module korespondencji seryjnej i napotkałem problem wymieniony tutaj.
źródło
Zamiast dodawać EntityFramework.SqlServer do projektu hosta, możesz zapewnić statyczne odniesienie do niego z projektu modelu / encji w ten sposób
Spowoduje to, że proces kompilacji obejmie montaż z projektem nadrzędnym.
Więcej informacji na moim blogu http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
źródło
Podczas instalowania Entity Framework 6 do
Nuget
. EntityFramework.SqlServer czasami tęskni za innym plikiem wykonywalnym. Po prostu dodajNuget
pakiet do tego projektu.Czasami powyższe nie działa dla Test Project
Aby rozwiązać ten problem w projekcie testowym, po prostu umieść tę metodę w projekcie testowym:
Ta metoda nigdy nie została wywołana, ale zgodnie z moimi obserwacjami kompilator usunie wszystkie „niepotrzebne” zespoły i bez użycia
EntityFramework.SqlServer
rzeczy test się nie powiedzie.źródło
EntityFramework.SqlServer
dodany do biblioteki klas, ale jeśli nie zostanie użyty, nie zostanie umieszczony w folderze wyjściowym aplikacji. Rozwiązałem ten problem, dodając polecenieExecutionStrategy
, które nadal musiałem zrobić, więc dodanie wiersza jakSetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
wDbConfiguration
klasie rozwiązało problem.Dodaj tę funkcję
do klasy kontekstowej bazy danych w klasie biblioteki, a brakująca biblioteka DLL EntityFramework.SqlServer.dll zostanie skopiowana do odpowiednich miejsc.
.
źródło
FixEfProviderServicesProblem
, próbowałem w konstruktorze, ale bez powodzenia.Żadne z tych nie działało dla mnie. Znalazłem rozwiązanie w innym pytaniu dotyczącym przepełnienia stosu . Dodam to tutaj dla łatwego odniesienia:
źródło
Wystąpił ten sam błąd podczas korzystania z Entity Framework 6 z programem SQL Server Compact 4.0. Pomocny był artykuł na temat MSDN dla dostawców Entity Framework dla EF6. Uruchomienie odpowiednich poleceń dostawcy jako pakietów nuget w konsoli Menedżera pakietów może rozwiązać problem, ponieważ również pakiety NuGet automatycznie dodają rejestracje do pliku konfiguracyjnego. Pobiegłem
PM> Install-Package EntityFramework.SqlServerCompact
rozwiązać problem.źródło
Ten problem napotkał dzisiaj podczas pracy z zestawem usług internetowych, każdy w różnych projektach, oraz osobnym projektem zawierającym testy integracyjne dla niektórych z tych usług.
Używam tej konfiguracji od jakiegoś czasu z EF5, bez potrzeby dołączania odniesień do EF z Integration Test Project.
Teraz, po aktualizacji do EF6, wydaje się, że muszę również dołączyć odniesienie do EF6 w projekcie testu integracji, nawet jeśli nie jest tam używany (prawie jak wskazał powyżej użytkownik 3004275 ).
Wskazania, przed którymi stoi ten sam problem:
Trzecia kwestia mnie na chwilę rzuciła i wciąż nie jestem pewien, dlaczego jest to wymagane. Dodanie referencji do EF6 w moim projekcie Integration Test rozwiązało to w każdym razie ...
źródło
Gdy błąd występuje w projektach testowych, najładniejszym rozwiązaniem jest udekorowanie klasy testowej:
źródło
Projekt startowy, który odwołuje się do projektu, w którym używany jest Entity Framework, potrzebuje następujących dwóch zestawów w folderze bin:
Dodanie a
<section>
do<configSections>
pliku .config w projekcie startowym powoduje, że pierwszy zestaw jest dostępny w tym katalogu bin. Możesz skopiować to z pliku .config swojego projektu Entity Framework:Aby udostępnić drugą bibliotekę .dll w folderze bin, chociaż nie jest to praktyczne, można wykonać ręczną kopię z folderu bin projektu Entity Framework. Lepszą alternatywą jest dodanie do wydarzeń po kompilacji projektu Entity Framework następujących linii, które zautomatyzują proces:
źródło
Właśnie dzisiaj napotkałem ten problem. Mam bibliotekę klas repozytorium danych z pakietem EF63 NuGet i aplikacją konsolową do testowania, które odnoszą się tylko do projektu biblioteki klas. Utworzyłem bardzo proste polecenie po kompilacji, które kopiuje EntityFramework.SqlServer.dll z folderu Bin \ Debug biblioteki klas do folderu Bin \ Debug aplikacji konsolowej i problem został rozwiązany. Nie zapomnij dodać sekcji entityFramework do pliku .config aplikacji konsoli.
źródło
Dodaj poniżej do pliku app.config.
źródło
<configSections>
-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
Usunięcie folderu BIN zrobiło to dla mnie
źródło
Powinieneś wymusić statyczne odniesienie do zestawu EntityFramework.SqlServer.dll , ale zamiast wstawiania fałszywego kodu, możesz to zrobić w piękniejszy sposób:
Jeśli masz już klasę DbConfiguration :
Jeśli nie masz klasy DbConfiguration , musisz umieścić następujący kod podczas uruchamiania aplikacji (przed użyciem EF):
źródło
Właśnie ponownie zainstalowałem Entity Framework za pomocą Nuget. I postępuj zgodnie z instrukcjami zapisanymi na poniższym linku: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html
Myślę, że problem zostanie rozwiązany.
źródło
Rozwiń plik YourModel.edmx i otwórz klasę YourModel.Context.cs pod YourModel.Context.tt.
Dodałem następujący wiersz w sekcji Używanie i błąd został naprawiony dla mnie.
using SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;
Może być konieczne dodanie tej linii do pliku za każdym razem, gdy plik jest generowany automatycznie.
źródło
Miałem również podobny problem. Mój problem został rozwiązany przez wykonanie następujących czynności:
źródło
wygląda na to, że nikt wcześniej nie wspomniał o sprawdzeniu, czy System.Data.SqlClient jest zainstalowany w systemie i czy jest do niego odniesienie.
Rozwiązałem problem, instalując System.Data.SqlClient i dodając nowego dostawcę w app.Config
źródło
Upewnij się również, że twój projekt startowy to projekt, który zawiera twój dbcontext (lub odpowiedni plik app.config). Mój próbował uruchomić projekt strony internetowej, który nie miał wszystkich niezbędnych ustawień konfiguracyjnych.
źródło
Próbowałem prawie wszystkich powyższych i nic nie działało.
Dopiero gdy ustawię przywoływane biblioteki DLL w projekcie domyślnym
EntityFramework
iEntityFramework.SqlServer
właściwościach,Copy Local
abyTrue
to zaczęło działać!źródło
Wszyscy potrzebuję twojej uwagi, że dwie biblioteki dll EntityFramework.dll i EntityFramework.SqlServer.dll są biblioteką warstwy DataAccess I użycie ich w widoku lub innej warstwie nie jest logiczne, ale rozwiązuje problem, ale nie jest logiczne.
logicznym sposobem jest usunięcie atrybutu enitiess i zastąpienie ich płynnym API. To jest prawdziwe rozwiązanie
źródło
Miałem jedną aplikację konsoli i bibliotekę klas. W bibliotece klas utworzyłem Model danych encji (kliknij prawym przyciskiem myszy na Bibliotekę klas> Dodaj> Nowy element> Dane> ADO.NET Entity Data Model 6.0) i umieściłem odnośniki w aplikacji konsoli. Tak więc masz aplikację konsolową, która ma odniesienie do biblioteki klas, a wewnątrz biblioteki klas masz model EF. Miałem ten sam błąd, gdy próbowałem uzyskać jakieś rekordy ze stołu.
Rozwiązałem ten problem, wykonując następujące kroki:
To wszystko, co musiałem zrobić i wszystko działało idealnie.
Mam nadzieję, że to pomogło.
źródło
Mam ten sam błąd. Dziwne, że zdarza się to tylko wtedy, gdy użyłem mojego dbContext do zapytania do dowolnego modelu lub pobrania jego listy, takich jak:
Próbowaliśmy ponownie zainstalować Entity Framework, odwoływać się do niego poprawnie, ale bezskutecznie.
Na szczęście próbowaliśmy sprawdzić rozwiązania Nuget
ALL
, a następnie zaktualizować wszystko lub się upewnićeverything
jest w tej samej wersji, ponieważ zauważyliśmy, że dwa projekty mają różne wersje EF w projekcie sieciowym. I to działa. Błąd zniknął.Oto zrzut ekranu dotyczący zarządzania Nuget dla wszystkich rozwiązań:
źródło
Brakuje tylko odwołania do EntityFramework.SqlServer.dll. W przypadku projektów EntityFramework korzystających z programu SQL Server dwa pliki, do których należy się odnieść, to EntityFramework.SqlServer.dll i EntityFramework.dll
źródło
Miałem podobny problem podczas migracji z bazy danych CE do Sql Server na platformie Azure. Właśnie zmarnowałem 4 godziny, próbując rozwiązać ten problem. Mam nadzieję, że może to uratować kogoś podobnego losu. Dla mnie miałem odniesienie do SqlCE w moim pliku packages.config. Usunięcie go rozwiązało cały mój problem i pozwoliło mi korzystać z migracji. Tak, Microsoft za kolejną technologię z niepotrzebnie złożonymi problemami z konfiguracją i konfiguracją.
źródło
Miałem ten sam problem, właśnie skopiowałem plik konfiguracji aplikacji z projektu zawierającego DBContext do mojego projektu testowego
źródło
Zgłoszono identyczny wyjątek. Włączyłem
i wszystko znów działa.
źródło
Ponieważ komunikat pokazuje, że musimy dodać dostawcę System.Data.SqlClient, dlatego musimy zainstalować pakiet nuget EntityFramework, który ma dwie biblioteki dll, ale jeśli tworzymy tylko aplikację konsolową, wystarczy dodać odwołanie do EntityFramework.SqlServer.dll
źródło