Nie znaleziono dostawcy Entity Framework dla dostawcy ADO.NET o niezmiennej nazwie „System.Data.SqlClient”

542

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

wprowadź opis zdjęcia tutaj

Fernando Vellozo
źródło
Używam EF5 bez providersi innych providerrzeczy, więc rozważ jego usunięcie?
ta.speot.is
1
umieść tutaj kopię ciągu połączenia
pylover
Ciąg połączenia znajduje się na obrazku (App.confing), nawiasem mówiąc, jest bardzo prosty public BaseStorage(): base ("RaptorDB") {}, wywołuję konstruktor , BaseStorage () dziedziczy po DbContext w EF5 wszystko działało idealnie, jeszcze nie w EF6.
Fernando Vellozo
10
Problem zostanie rozwiązany poprzez zainstalowanie EF6, drugiego projektu (konsoli), dzięki wszystkim, którzy pomogli w jakikolwiek sposób!
Fernando Vellozo
3
Wydaje mi się, że jest to spowodowane tym, że Visual Studio nie zdaje sobie sprawy, że zespół EntityFramework.SqlServer był faktycznie używany przez projekt podstawowy. Jeśli zrobisz coś takiego jak odpowiedź @ Carra , nie musisz dodawać EF do każdego projektu, który odwołuje się do twojego projektu podstawowego - znacznie czystsze.
tehDorf

Odpowiedzi:

608

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 :

PM> Install-Package EntityFramework
douglaslps
źródło
34
PMC napisał, że „EntityFramework 6.0.1” jest już zainstalowany, ale dodał go do mojej aplikacji na konsolę (która z założenia NIE używa EF), ale zrobiło to samo dla mnie. II usuwam EF z referencji aplikacji konsolowej, zwraca błędy, nie otrzymuję tego - moja aplikacja konsolowa korzysta z projektu repozytorium (który korzysta z EF) Dziękujemy za pomoc!
Prokurors
33
Nie zapomnij dodać -ProjectName <ProjectName> do wiersza poleceń, jeśli masz kilka projektów w swoim rozwiązaniu ... !!!
Eugenio Miró
1
Za pomocą -Preopcji 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),
Davide Icardi
10
Mam ten sam problem. Miałem projekt, który nie miał odniesienia do EF, ale dll EF był w folderze debugowania. Uruchomienie tego polecenia dla tego projektu dodanego EntityFramework.SqlServer.dlldo folderu Debug - problem rozwiązany.
qujck,
4
W mojej sytuacji ten błąd nie pojawił się, dopóki nie wdrożyłem projektu na naszym serwerze testowym. Rzeczywiście brakowało EntityFramework.SqlServer.dll i instalacja EF za pomocą menedżera pakietów działała. Właśnie dodał dwa odpowiednie odniesienia do projektu, a następnie dodał ustawienia entityFramework do pliku web.config. Wydaje mi się, że lokalny IIS był w stanie uzyskać źródło zestawu lokalnie, ale pełny IIS na serwerze WWW nie mógł z powodu uprawnień?
Atters,
383

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.).

Clément Picou
źródło
246
To absolutnie absurdalna odpowiedź. Dlaczego, u licha, miałbym to robić? A wiesz, co jest jeszcze bardziej śmieszne? To działa.
Robert
19
Zobacz moją odpowiedź poniżej, nie musisz instalować EF w aplikacji konsoli.
Francisco Goldenstein,
7
Twoja odpowiedź jest poprawna. Dodaj tylko referencję EntityFramework.SqlServer.dll do projektu nakładki, który korzysta z biblioteki z EF, napraw problem. Więc nie używaj tego EF (tylko DLL)
harveyt
31
Nie musisz dodawać odwołania do EF w aplikacji konsolowej / internetowej. Musisz tylko upewnić EntityFramework.SqlServer.dllsię, ż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/870604
ken2k
3
Podejrzewam, że powodem, dla którego EntityFramework.SqlServer.dll nie jest wykrywany jako zależność, jest to, że Entity Framework ładuje go dynamicznie. Skąd twój projekt powinien wiedzieć, aby skopiować przez dostawcę SQL, gdy jedyne odniesienie do niego znajduje się w pliku konfiguracyjnym?
Joel McBeth
209

Nie 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:

  • Aplikacja biblioteki klas:
    • Zainstaluj Entity Framework
    • Napisz kod warstwy danych
    • Plik app.config zawiera całą konfigurację związaną z Entity Framework, z wyjątkiem ciągu połączenia.
  • Utwórz konsolę, aplikację internetową lub komputerową:
    • Dodaj odniesienie do pierwszego projektu.
    • Dodaj odwołanie do EntityFramework.SqlServer.dll.
    • app.config / web.config ma parametry połączenia (pamiętaj, że nazwa wpisu konfiguracji musi być taka sama jak nazwa klasy DbContext.

Mam nadzieję, że to pomoże.

Francisco Goldenstein
źródło
18
Poprawna odpowiedź. NIE musisz instalować EF. EntityFramework.SqlServer.dll.
Tom Stickel
15
Muszę się zgodzić. To jest całkowicie poprawna odpowiedź. Odwołaj się do biblioteki DLL o rozmiarze 1/2 mb lub pociągnij projekt EF nuget, który ma rozmiar> 5,5 mb. Zmniejsza również nieco wartość architektury wielopoziomowej. Słabe show z MS naprawdę: Mam 4 poziomy i mój najwyższy poziom naprawdę nie powinien mieć powodu, aby wiedzieć coś o EF
72GM
18
W każdym razie wciąż niedorzeczne. np. Dlaczego interfejs potrzebuje odniesienia do SqlServer? W moim przypadku przód nie mógł się tym przejmować. Ale to działa. +1
Mike de Klerk
2
To było pomocne. Wielkie dzięki.
peter_the_oak
1
Czy nie utrudni to aktualizacji wersji EntityFramework? Trzeba będzie pamiętać, aby przejść i zaktualizować odwołanie do biblioteki DLL
zgniatanie
114

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.

Mikrofon
źródło
7
Natrafiłem na ten problem, kiedy wcześniej miałem projekt (a) z odniesieniem do projektu (b), który miał odniesienie do EF. Po wyczyszczeniu i usunięciu folderu bin projektu (a), a następnie przebudowie, pojawiło się odniesienie EF, ale nie EF.SqlServer.dll. Kopiowanie tego w ręcznie działało dla mnie
dan richardson
2
@dan Richardson dziękuje za wzmiankę o „usunięciu folderu bin”.
Rajshekar Reddy,
Wystąpił błąd podczas próby uruchomienia skryptu LINQPad po aktualizacji EF6. Nawet odwołanie do EntityFramework.SqlServer.dll w LINQPad nie naprawiło tego, dopóki nie przebudowałem mojego rozwiązania w VS2013. Nowa referencja została następnie poprawnie rozwiązana w LINQPad i mój skrypt został uruchomiony!
Chris
W moim przypadku czułem się dobrze w środowisku deweloperskim, ale kiedy opublikowałem, pojawia się problem, o którym mowa. Po porównaniu listy bibliotek w dev z folderem bin na serwerze zauważyłem nieobecność EntityFramework.SqlServer.dll, wystarczy załadować go i odświeżyć aplikację, i voila to naprawiła.
Henry Rodriguez
To był dla mnie problem, dzięki! Zobacz czyste rozwiązanie @Anders, aby uniknąć problemów z zapominaniem o dołączeniu biblioteki DLL do każdego wymaganego projektu.
SharpC
54

Zamiast dodawać EntityFramework.SqlServer do projektu hosta, możesz zapewnić statyczne odniesienie do niego z projektu modelu / encji w ten sposób

static MyContext()
{
    var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
    if(type == null)
        throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}

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/

Anders
źródło
5
Myślę, że jest to ładne, czyste rozwiązanie, w którym nie musimy umieszczać odniesień do bibliotek DLL związanych z trwałością w projektach, które powinny być niezależne od trwałości.
JTech,
3
Zgadzam się i dotyczy każdej biblioteki z ukrytymi zależnościami, a nie tylko trwałością
Anders
3
Jeśli masz wyraźną zależność od typu w zespole, zostanie on skopiowany przez proces kompilacji. Jednak tutaj nie ma wyraźnej zależności, a proces kompilacji nie powiedzie się skopiować zestawu do folderu kompilacji. Mój kod po prostu upewnij się, że istnieje wyraźne odniesienie do dowolnego typu we wspomnianym zestawie.
Anders
2
Bez niego nie ma wyraźnej zależności od zestawu od twojego kodu i nie zostanie on skopiowany do wyjścia
Anders
2
To jest genialne.
Kris,
48

Podczas instalowania Entity Framework 6 do Nuget. EntityFramework.SqlServer czasami tęskni za innym plikiem wykonywalnym. Po prostu dodaj Nugetpakiet 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:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

Ta metoda nigdy nie została wywołana, ale zgodnie z moimi obserwacjami kompilator usunie wszystkie „niepotrzebne” zespoły i bez użycia EntityFramework.SqlServerrzeczy test się nie powiedzie.

Umar Abbas
źródło
2
Cóż, to nie jest ładne, ale naprawiło problem, który miałem w moim projekcie testowym. Żadne z pozostałych rozwiązań nie zadziałało.
Honorowy Chow,
W moim przypadku wystarczyło dodać Entity Framework również do mojego projektu testowego w „Zarządzaj pakietami Nuget dla rozwiązania”
Juha Palomäki
w rzeczywistości musisz wziąć udział w dowolnym projekcie (nie tylko w teście), aby mieć pewność, że System.Data.Entity.SqlServer zostanie uwzględniony w „zestawie lib wyników” po kompilacji (uwaga: Unity lub inne narzędzie IoC może zmienić tę regułę i będziesz trzeba wywołać ten kod z projektu testowego).
Roman Pokrovskij
To jest rzeczywiście najlepsze rozwiązanie, ponieważ nie musisz rozpylać referencji ram encji w dowolnym miejscu w projekcie.
Daniel Lobo,
To wskazało mi właściwy kierunek. Zostanie EntityFramework.SqlServerdodany 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 polecenie ExecutionStrategy, które nadal musiałem zrobić, więc dodanie wiersza jak SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());w DbConfigurationklasie rozwiązało problem.
Jan_V,
24

Dodaj tę funkcję

private void FixEfProviderServicesProblem()

do klasy kontekstowej bazy danych w klasie biblioteki, a brakująca biblioteka DLL EntityFramework.SqlServer.dll zostanie skopiowana do odpowiednich miejsc.

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

        private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider assembly is available to the running application. 
            // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    }
}

.

Johannes
źródło
przepraszam, próbuję go odwołać ... ponieważ nie sądziłem, że to zadziała ... i to działa! ... mówi, że nie mogę zmienić mojego głosu, chyba że odpowiedź jest edytowana, ponieważ jest za długa i od tego czasu zablokowane ...
Seabizkit
To też działało dla mnie. Mamy projekt biblioteki korzystający z EF 6 oraz aplikację konsolową korzystającą z biblioteki. Otrzymywaliśmy ten sam wyjątek, co PO. Nie chcemy umieszczać konfiguracji specyficznej dla EntityFramework w pliku konfiguracyjnym aplikacji, więc ta metoda działała dla nas. Dzięki
Rob
1
Jak dzwonisz FixEfProviderServicesProblem, próbowałem w konstruktorze, ale bez powodzenia.
Francis Ducharme
1
Nigdy tego nie nazywam - nie muszę. Fakt, że tam jest, sprawia, że ​​.net myśli, że jest potrzebny i obejmuje EntityFramwork jako zależność.
Johannes
Prawdopodobnie z stackoverflow.com/a/19130718/1467396 ? Ale +1, dla jasności, jak / gdzie go użyć.
David
20

Ż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:

Musisz zrobić odniesienie, aby zostało skopiowane do ścieżki aplikacji. Ponieważ później będzie się do niego odwoływał w czasie wykonywania. Więc nie musisz kopiować żadnych plików.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Carra
źródło
2
To! Nie trzeba dodawać odwołania do innych projektów, które mogą odnosić się do tego zestawu.
tehDorf
8

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.SqlServerCompactrozwiązać problem.

MaySara
źródło
2
Jestem naprawdę zaskoczony, że nikt dotąd nie głosował na to! Komunikat o błędzie mówi jasno: przyczyną błędu jest to, że po aktualizacji EF tak naprawdę nie ma definicji dostawcy dla SQL Compact w pliku web.config aplikacji! Dodanie wspomnianego pakietu naprawia plik web.config i zostanie zdefiniowany dostawca.
Csaba Toth
1
po prostu ratowanie życia. Powinien być oznaczony jako odpowiedź, ponieważ wyraźnie zapewnia rozwiązanie problemu
ZafarYousafi
7

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:

  • Wywołania bezpośrednio do EF (połączenie z bazą danych, pobieranie danych itp.) Działają dobrze, o ile są inicjowane z projektu, który ma odniesienia do EF6.
  • Połączenia z usługą za pośrednictwem opublikowanego interfejsu usługi działają poprawnie; tzn. nie ma brakujących referencji „wewnętrznie” w serwisie.
  • Wywołania bezpośrednio do metod publicznych w projekcie usługi, z projektu poza usługą, spowodują ten błąd, nawet jeśli EF nie jest używany w tym projekcie; tylko wewnętrznie w tak zwanym projekcie

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 ...

Kjartan
źródło
7

Gdy błąd występuje w projektach testowych, najładniejszym rozwiązaniem jest udekorowanie klasy testowej:

[DeploymentItem("EntityFramework.SqlServer.dll")]
Alberto Juan
źródło
To naprawdę ładne, ale generuje więcej pracy i łatwiej zapomnieć. Dzięki sztuczce „wymuszonego odniesienia” musisz to zrobić tylko w przypadku projektów, które naprawdę potrzebują EF.
Charles Roberto Canato,
7

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:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

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:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

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:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
Leonel B.
źródło
2
Dzięki, mam platformę Entity w warstwie danych, więc jest izolowana, ale szkoda, że ​​Microsoft nie pozwala nam naprawdę odizolować warstwy danych i zmusza nas do zanieczyszczenia systemu użytkownika technologią baz danych. Miałem nadzieję, że nie będę musiał tego robić.
Matt
4

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.

Ondřej
źródło
4

Dodaj poniżej do pliku app.config.

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
Taran
źródło
Musisz także zarejestrować go w <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove
To właśnie robi „IInstall-Package EntityFramework”. Nie jest to tak naprawdę konieczne, ponieważ EntityFramework domyślnie próbuje załadować EntityFramework.SqlServer.dll dla niezmiennej nazwy SqlClient. Tej metody można użyć do zastąpienia dostawcy.
user1295211
3

Usunięcie folderu BIN zrobiło to dla mnie

David
źródło
3

Powinieneś wymusić statyczne odniesienie do zestawu EntityFramework.SqlServer.dll , ale zamiast wstawiania fałszywego kodu, możesz to zrobić w piękniejszy sposób:

  1. Jeśli masz już klasę DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Jeśli nie masz klasy DbConfiguration , musisz umieścić następujący kod podczas uruchamiania aplikacji (przed użyciem EF):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
Rosberg Linhares
źródło
2

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.

Kuntal Ghosh
źródło
Wyjaśnienie byłoby fajne! Dlaczego musisz go ponownie zainstalować i tak dalej
Rizier123
1
Ponieważ z jakichś nieznanych przyczyn zmiany nie wejdą w życie, dlatego ponownie zainstalowałem EntityFramework 6.1.1, a potem zaczyna obowiązywać.
Kuntal Ghosh,
2

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.

użytkownik2347528
źródło
2

Miałem również podobny problem. Mój problem został rozwiązany przez wykonanie następujących czynności:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

BehrouzMoslem
źródło
2

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

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
Tobi Owolawi
źródło
1

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.

użytkownik2588362
źródło
1

Próbowałem prawie wszystkich powyższych i nic nie działało.

Dopiero gdy ustawię przywoływane biblioteki DLL w projekcie domyślnym EntityFrameworki EntityFramework.SqlServerwłaściwościach, Copy Localaby Trueto zaczęło działać!

SharpC
źródło
1

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

Vahid Akbari
źródło
1

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:

  1. Kliknij prawym przyciskiem myszy rozwiązanie i wybierz opcję „Zarządzaj pakietami NuGet dla rozwiązania”, a pojawi się okno menedżera pakietów NuGet.
  2. Przejdź do opcji „Zarządzaj” w „Zainstalowanych pakietach” WSKAZÓWKA: Entity Framework jest dodawany do biblioteki klas, więc będziesz mieć EntityFramework w „Zainstalowanych pakietach”, a zobaczysz opcję „Zarządzaj”
  3. Kliknij opcję „Zarządzaj” i zaznacz, aby zainstalować pakiet w projekcie, który ma odwołanie do biblioteki klas, która zawiera model EF (w moim przypadku ustawiłem pole wyboru, aby zainstalować pakiet do aplikacji konsoli, która zawierała odwołanie do biblioteki klas, w której był model EF)

To wszystko, co musiałem zrobić i wszystko działało idealnie.

Mam nadzieję, że to pomogło.

dkkd
źródło
1

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:

var results = _dbContext.MyModel.ToList();

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ń:

wprowadź opis zdjęcia tutaj

Willy David Jr
źródło
1

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

użytkownik2956314
źródło
0

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ą.

użytkownik2662643
źródło
0

Miałem ten sam problem, właśnie skopiowałem plik konfiguracji aplikacji z projektu zawierającego DBContext do mojego projektu testowego

Stephen ebichondo
źródło
0

Zgłoszono identyczny wyjątek. Włączyłem

using System.Data; 
using System.Data.Entity;

i wszystko znów działa.

kneerunjun
źródło
0

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

Sandeep Shekhawat
źródło