'System.Data.SqlClient' değişmez adıyla ADO.NET sağlayıcısı için Entity Framework sağlayıcısı bulunamadı


543

EF6'yı nuget ile indirdikten ve projemi çalıştırmayı denedikten sonra, aşağıdaki hatayı döndürür:

'System.Data.SqlClient' değişmez adıyla ADO.NET sağlayıcısı için Entity Framework sağlayıcısı bulunamadı. Sağlayıcının, uygulama yapılandırma dosyasının 'entityFramework' bölümüne kayıtlı olduğundan emin olun. Daha fazla bilgi için http://go.microsoft.com/fwlink/?LinkId=260882 adresine bakın .

resim açıklamasını buraya girin


EF5'i providersve provideröğeleri olmadan kullanıyorum , bu yüzden kaldırmayı düşünün?
ta.speot.is

1
bağlantı dizesinin bir kopyasını buraya
koyun

Bağlantı dizesi resimde (App.confing), bu arada çok basit, ben yapıcı public BaseStorage(): base ("RaptorDB") {}diyorum, BaseStorage () EF5 DbContext devralır her şey mükemmel çalıştı, zaten EF6.
Fernando Vellozo

10
Sorun, herhangi bir şekilde yardımcı olan herkes sayesinde, ikinci proje (Konsol) EF6'yı yükleyerek çözülecek!
Fernando Vellozo

3
Benim için, bu Visual Studio EntityFramework.SqlServer derleme temel proje tarafından aslında kullanılmadığını fark gibi görünüyordu. @ Carra'nın cevabı gibi bir şey yaparsanız, temel projenize referans veren her projeye EF eklemeniz gerekmez - çok daha temiz.
tehDorf

Yanıtlar:


608

Sadece aynı problemle karşılaştım ve NuGet Package Manager'dan yüklenmiş olmasına rağmen EntityFramework gibi görünüyor projeye doğru yüklenmemiş.

Paket Yöneticisi Konsolu'nda aşağıdaki komutu çalıştırarak düzeltmeyi başardım :

PM> Install-Package EntityFramework

34
PMC, 'EntityFramework 6.0.1'in zaten yüklü olduğunu yazdı, ancak konsol uygulamama ekledi (accutally EF kullanmıyor), ama benim için de hile yaptı. II konsol uygulama referansları, hata döndürür EF kaldırmak, bu anlamıyorum - benim konsol uygulaması (EF kullanan) depo projesi kullanıyor Yardım için teşekkürler!
Prokurors

33
Çözümünüzde birkaç proje varsa -ProjectName <ProjectName> komut satırına eklemeyi unutmayın ... !!!
Eugenio Miró

1
-PreSeçeneğini kullanarak nuget'e yayın öncesi paketleri yüklemesini söyleyin. Kullanmanızı tavsiye etmiyorum. Benzer bir hata var ama çözüm sadece ana projeye EntityFramework yüklemek oldu. Bir sınıf kütüphanesine yükledim ama ana projeye (web / konsol / ya da her neyse)
kurmadım

10
Burada da aynı problem. EF referansı olmayan bir projem vardı ama EF dll Debug klasöründeydi. Bu komutu bu projeye karşı çalıştırmak EntityFramework.SqlServer.dll, Debug klasörüne eklendi - problem çözüldü.
qujck

4
Benim durumumda, projeyi test sunucumuza dağıtana kadar bu hata kendini göstermedi. Gerçekten de eksikti ve paket yöneticisi aracılığıyla EF yükleme EntityFramework.SqlServer.dll oldu. Projeye ilgili iki başvuruyu ekledi ve daha sonra web.config dosyasına entityFramework ayarlarını ekledi. Sanırım yerel IIS derleme yerel kaynak mümkün ama web sunucusundaki tam IIS izinleri nedeniyle olamazdı?
Ocak'ta Atters

384

Bir sınıf kütüphanesi projesine EF eklediniz. Ayrıca, onu referans alan projeye eklemeniz gerekir (konsol uygulamanız, web siteniz veya her neyse).


247
Bu kesinlikle saçma bir cevap. Bunu neden dünyada yapmam gerek? Ve daha da saçma olanı biliyor musun? İşe yarıyor.
Robert

19
Aşağıdaki cevabımı görün, konsol uygulamanıza EF kurmanız gerekmez.
Francisco Goldenstein

7
Cevabınız doğru. Yalnızca EF ile bir kitaplık kullanan ön uç projesine başvuru EntityFramework.SqlServer.dll dosyasını ekleyin, sorunu düzeltin. Yani bu EF (sadece DLL) kullanmayın
harveyt

31
Sen yok etmek zorunda konsol / web uygulamasında EF başvuru ekleyin. EntityFramework.SqlServer.dllBin dizinine kopyalandığından emin olmanız yeterlidir . Güçlü bir referans eklemek mimarinizi bozabilir (birden fazla katman oluşturduysanız, üst düzey yürütme montajınız EF hakkında bile bilgi sahibi olmamalıdır). Bunun yerine, SQL Server sağlayıcısının kopyalandığından emin olabilirsiniz. Örneğin, bkz. Stackoverflow.com/a/19130718/870604
ken2k

3
EntityFramework.SqlServer.dll bağımlılığı olarak algılanma nedeni şüpheli Entity Framework dinamik olarak yükler çünkü. Yapılandırma dosyasında tek referans olduğunda, projenizin SQL sağlayıcısı üzerinden kopyalamayı nasıl bilmesi gerekir?
Joel McBeth

209

Entity Framework'ü Konsol uygulamanıza yüklemeniz gerekmez, yalnızca EntityFramework.SqlServer.dll derlemesine bir başvuru eklemeniz gerekir. Bu derlemeyi Entity Framework kullanan Sınıf Kitaplığı projesinden bir LIB klasörüne kopyalayabilir ve bir başvuru ekleyebilirsiniz.

Özetle:

  • Sınıf Kütüphanesi uygulaması:
    • Varlık Çerçevesini Yükle
    • Veri katmanı kodunuzu yazın
    • app.config dosyası, bağlantı dizesi dışında Entity Framework ile ilgili tüm yapılandırmaya sahiptir.
  • Konsol, web veya masaüstü uygulaması oluşturun:
    • İlk projeye bir başvuru ekleyin.
    • EntityFramework.SqlServer.dll dosyasına bir başvuru ekleyin.
    • app.config / web.config bağlantı dizesine sahiptir (yapılandırma girdisinin adının DbContext sınıfının adıyla aynı olması gerektiğini unutmayın.

Umut ediyorum bu yardım eder.


18
Doğru cevap. EF kurulumuna gerek yoktur. EntityFramework.SqlServer.dll.
Tom Stickel

15
Katılıyorum. Bu tamamen doğru cevap. 1/2 mb olan bir dll referans alın veya> 5.5 mb olan EF nuget projesini çekin. Çok katmanlı mimariyi de biraz düşürür. MS'den kötü bir gösteri gerçekten: 4
katmanım

18
Yine de saçma. Örneğin, bir kullanıcı arabirimi neden SqlServer için bir referansa ihtiyaç duyar? Ön uç daha az umursamazdı, benim durumumda. Ama işe yarıyor. +1
Mike de Klerk

2
Bu yardımcı oldu. Çok teşekkürler.
peter_the_oak

1
Bu, EntityFramework sürümlerini güncellemeyi zorlaştırmayacak mı? Git ve DLL başvurusunu güncellemeyi hatırlamanız gerekir
ezilme

114

"EntityFramework.SqlServer.dll" dosyasını eklemeyi unutursanız bu mesajı da görebilirsiniz .

EF6'da yeni eklenen bir dosya gibi görünüyor. Başlangıçta birleştirme modülüme dahil etmedim ve burada listelenen soruna rastladım.


7
Daha önce EF'e atıfta bulunan bir projeye (b) atıfta bulunan bir proje (a) olduğunda bu problemle karşılaştım. Proje (a) bin klasörünü temizledikten ve sildikten sonra yeniden oluşturduktan sonra EF referansı geldi, ancak EF.SqlServer.dll değil. Bunu elle kopyalama benim için çalıştı
dan richardson

2
@dan richardson 'bin klasörünü sil' den bahsettiğiniz için teşekkür ederiz.
Rajshekar Reddy

EF6 yükseltmesinden sonra bir LINQPad komut dosyasını çalıştırmaya çalışırken hatayla karşılaştım. Hatta LINQPad EntityFramework.SqlServer.dll başvurmak ben VS2013 çözümüm yeniden inşa kadar düzeltmedi. Daha sonra yeni referans LINQPad'de düzgün bir şekilde çözüldü ve betiğim çalıştı!
Chris

Benim durumumda dev ortamda Tamam ama yayınladığımda başvurulan sorun görünür. Sunucuda bin klasörüne karşı dev kütüphaneler listesini karşılaştırdıktan sonra ben EntityFramework.SqlServer.dll yok, ben sadece yüklemek ve uygulamayı yenilemek ve sabit voila fark ettim.
Henry Rodriguez

Benim için sorun buydu, teşekkürler! DLL'yi gereken her projeye dahil etmeyi unutmayı önlemek için @Anders tarafından temiz çözüme bakın.
SharpC

54

EntityFramework.SqlServer'ı projeye ev sahipliği yapmak yerine, Model / varlık projenizden buna benzer statik bir referans sağlayabilirsiniz.

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");
}

Bu, inşa sürecinin ev sahibi projeyle montajı içermesini sağlayacaktır.

Blogum hakkında daha fazla bilgi http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


5
Ben bu kalıcılık agnostik olması gereken projelerde kalıcılık ile ilgili DLL başvuruları dahil etmek zorunda değilsiniz güzel bir temiz çözüm olduğunu düşünüyorum.
JTech

3
Kabul etti ve sadece kalıcılık değil, örtük bağımlılıkları olan herhangi bir kütüphane için geçerli
Anders

3
Bir derlemedeki bir türe açık bir bağımlılığınız varsa, derleme işlemi tarafından kopyalanır. Ancak burada açık bir bağımlılığınız yoktur ve derleme işlemi derlemeyi derleme klasörüne kopyalayamaz. Kodum sadece adı geçen derleme herhangi bir tür için açık bir başvuru var emin olun.
Anders

2
Bu olmadan, kodunuzdan derlemeye açık bir bağımlılık yoktur ve çıktıya kopyalanmayacaktır
Anders

2
Bu harika.
Kris

48

Entity Framework 6'yı yüklediğinizde Nuget. EntityFramework.SqlServer bazen başka bir yürütülebilir dosyayı özlüyor. NugetPaketi bu projeye eklemeniz yeterlidir .

Bazen yukarıdaki Test Projesi için çalışmaz

Test Projesi'nde bu sorunu çözmek için bu Yöntemi Test Projesi'ne yerleştirin:

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

Bu yöntem asla çağrılmaz, ancak gözlemlerim olarak, derleyici tüm "gereksiz" montajları kaldıracak EntityFramework.SqlServerve test başarısız olan şeyleri kullanmadan kaldıracaktır .


2
Bu hoş değil ama test projemde yaşadığım sorunu düzeltti. Diğer çözümlerin hiçbiri işe yaramadı.
Onurlu Chow

Benim durumumda "Çözüm için Nuget paketlerini yönet" bölümündeki test projeme Entity Framework'ü de eklemek yeterliydi
Juha Palomäki

Aslında System.Data.Entity.SqlServer'ın derlemeden sonra "results lib set" içine dahil edileceğinden emin olmak için herhangi bir projeye (sadece test değil) girmeniz gerekir (not: Unity veya diğer IoC aracı bu kuralı değiştirebilir ve siz test projesinden bu kodu çağırmanız gerekir).
Roman Pokrovskij

Bu aslında en iyi çözümdür, çünkü projenizin her yerine varlık çerçevesi referanslarını püskürtmek zorunda değilsiniz.
Daniel Lobo

Bu beni doğru yöne çekti. Bu EntityFramework.SqlServer, sınıf kitaplığınıza eklenir, ancak kullanılmazsa uygulamanızın çıktı klasörünün içine yerleştirilmez. ExecutionStrategyHala yapmam gereken bir ekleyerek sorunu çözdüm , bu yüzden SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());bir DbConfigurationsınıfın içindeki gibi bir satır eklemek sorunu düzeltti.
Jan_V

24

Bu işlevi ekle

private void FixEfProviderServicesProblem()

sınıfındaki veritabanı bağlam sınıfına ve eksik DLL EntityFramework.SqlServer.dll doğru yerlere kopyalanır.

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;
        }
    }
}

.


Üzgünüm onu ​​iptal etmeye çalışıyorum ... işe yarayacağını düşünmediğim gibi ... ve işe yarıyor! kilitli ...
Seabizkit

Bu benim için de işe yaradı. EF 6 kullanan bir kütüphane projemiz ve kütüphaneyi kullanan bir konsol uygulamamız var. OP ile aynı istisnayı yaşıyorduk. EntityFramework'e özgü yapılandırmayı uygulama yapılandırma dosyasına yerleştirmek istemiyoruz, bu nedenle bu yöntem bizim için çalıştı. Teşekkürler
Rob

1
Nereye çağırıyorsun FixEfProviderServicesProblemben yapıcıda denedim, şanssız.
Francis Ducharme

1
Asla aramam - gerek yok. Orada olması .net'in gerekli olduğunu düşündürüyor ve EntityFramwork'ü bağımlılık olarak içeriyor.
Johannes

Muhtemelen stackoverflow.com/a/19130718/1467396 adresinden mi? Ancak +1, nasıl / nerede kullanılacağı konusunda netlik için.
David

20

Bunların hiçbiri benim için işe yaramadı. Çözümü başka bir yığın akışı sorusunda buldum . Kolay başvuru için buraya ekleyeceğim:

Bir başvuru yapmanız gerekir, böylece başvuru uygulama yoluna kopyalanır. Çünkü daha sonra çalışma zamanında referans verilecektir. Bu yüzden herhangi bir dosya kopyalamanıza gerek yoktur.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

2
Bu! Bu derlemeye başvurabilecek diğer projelere başvuru eklemenize gerek yoktur.
tehDorf

8

SQL Server Compact 4.0 ile Entity Framework 6 kullanırken aynı hatayı aldım. EF6 için MSDN for Entity Framework Sağlayıcıları makalesi yardımcı oldu. İlgili sağlayıcı komutlarının Paket Yöneticisi Konsolu'nda nuget paketleri olarak çalıştırılması sorunu çözebilir, ayrıca NuGet paketleri yapılandırma dosyasına otomatik olarak kayıt ekler. PM> Install-Package EntityFramework.SqlServerCompactSorunu çözmek için koştum .


2
Kimsenin buna oy vermediğine gerçekten şaşırdım! Hata mesajı açıkça belirtilir: Hatanın nedeni, EF yükseltmesinden sonra, uygulamanın web.config dosyasında SQL Compact için gerçekten sağlayıcı tanımı kalmamasıdır! Bahsettiğiniz paketi eklemek web.config dosyasını düzeltir ve sağlayıcı tanımlanır.
Csaba Toth

1
sadece hayat kurtarıcı. Soruna açıkça çözüm sağladığı için yanıt olarak işaretlenmelidir
ZafarYousafi

7

Her biri farklı projelerde bir dizi web hizmeti ve bu hizmetlerin bazıları için entegrasyon testleri içeren ayrı bir proje ile çalışırken bugün bu sorunla karşılaştık.

Entegrasyon Test Projesi'nden EF referanslarına gerek duymadan EF5 ile bir süredir bu kurulumu kullanıyorum.

Şimdi, EF6'ya yükselttikten sonra, orada kullanılmasa bile entegrasyon test projesinde EF6'ya bir referans eklemem gerekiyor gibi görünüyor (hemen hemen yukarıda user3004275 tarafından belirtildiği gibi ).

Aynı sorunla karşı karşıya olduğunuz belirtileri:

  • Doğrudan EF6'ya (DB'ye bağlanma, veri alma, vb.) Yapılan çağrılar, EF6'ya referansları olan bir projeden başlatıldıkları sürece iyi çalışır.
  • Yayımlanmış bir servis arabirimi üzerinden servise yapılan aramalar sorunsuz çalışır; yani, hizmette "dahili olarak" eksik referans yoktur.
  • EF projenin kendisinde kullanılmasa bile, hizmet projesindeki genel yöntemlere doğrudan hizmet dışındaki bir projeden çağrı yapılması bu hataya neden olur; sadece dahili olarak çağrılan projede

Üçüncü nokta, beni bir süreliğine atmış olan şey ve bunun neden gerekli olduğundan hala emin değilim. Entegrasyon Testi projemde EF6'ya bir ref eklemek, bunu her durumda çözdü ...


7

Test projelerinde hata meydana geldiğinde, en güzel çözüm test sınıfını aşağıdakilerle süslemektir:

[DeploymentItem("EntityFramework.SqlServer.dll")]

Gerçekten güzel, ama daha fazla iş üretiyor ve unutması daha kolay. "Zorunlu referans" hilesi ile, sadece gerçekten EF kullanması gereken projelerde yapmanız gerekir.
Charles Roberto Canato

7

Entity Framework'ün kullanıldığı projeye başvuran başlangıç ​​projesi, bin klasöründe aşağıdaki iki derlemeye ihtiyaç duyar:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Bir ekleme <section>için <configSections>başlangıç proje üzerinde .Config dosyasının o bin dizininde ilk montaj kullanılabilir hale getirir. Bunu Entity Framework projenizin .config dosyasından kopyalayabilirsiniz:

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

İkinci .dll dosyasını bin klasöründe kullanılabilir duruma getirmek için, pratik olmasa da, Entity Framework projesinin bin klasöründen el ile kopyalanabilir. Daha iyi bir alternatif, Entity Framework projesinin Derleme Sonrası Etkinlikleri sürecini otomatikleştirecek aşağıdaki satırları eklemektir:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\

2
Teşekkürler, bir veri katmanında Entity çerçevesine sahibim, bu yüzden izole edildi, ancak microsoft'un veri katmanını gerçekten izole etmemize izin vermemesi ve ux'i bir veritabanı teknolojisi ile kirletmemizi sağlamak talihsiz bir durum. Bunu yapmak zorunda olmayacağımı umuyordum.
Matt

4

Bugün sadece bu problemle karşılaşıyorum. EF63 NuGet paketi ve test için konsol uygulaması ile veri havuzu sınıf kütüphanem var, sadece sınıf kütüphanesi projesine referans var. EntityFramework.SqlServer.dll sınıf kütüphanesinin Bin \ Debug klasöründen konsol uygulamasının Bin \ Debug klasörüne kopyalayan ve çözülen çok basit bir post-build komutu oluşturdum. Konsol uygulamasının .config dosyasına entityFramework bölümünü eklemeyi unutmayın.


4

Aşağıdakini app.config dosyanıza ekleyin.

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

Ayrıca kaydetmeniz gerekir <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove

"IInstall-Package EntityFramework" bunu yapar. EntityFramework varsayılan olarak SqlClient değişmez adı için EntityFramework.SqlServer.dll yüklemeye çalışır çünkü bu gerçekten gerekli değildir. Bu yöntem, sağlayıcıyı değiştirmek için kullanılabilir.
user1295211


3

EntityFramework.SqlServer.dll derlemesine statik bir başvuruyu zorlamanız gerekir , ancak sahte bir kod koymak yerine bunu daha güzel bir şekilde yapabilirsiniz:

  1. Zaten bir DbConfiguration sınıfınız varsa:

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Bir DbConfiguration sınıfınız yoksa, uygulama başlangıcında (EF kullanılmadan önce) aşağıdaki kodu koymanız gerekir:

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }

2

Entet Framework'ü Nuget kullanarak yeniden yükledim. Ve aşağıdaki bağlantıda yazılı talimatları izleyin: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Bence sorun çözülecek.


Bir açıklama iyi olurdu! Neden yeniden yüklemeniz gerekiyor vb.
Rizier123

1
Çünkü bazı bilinmeyen neden (ler) de değişiklikler geçerli olmayacak ve bu nedenle EntityFramework 6.1.1'i yeniden yükledim ve bundan sonra yürürlüğe girecek.
Kuntal Ghosh

2

YourModel.edmx dosyanızı genişletin ve YourModel.Context.tt altında YourModel.Context.cs sınıfını açın.

Kullanım bölümüne aşağıdaki satırı ekledim ve hata benim için düzeltildi.

SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices kullanarak;

Dosya her otomatik oluşturulduğunda bu satırı dosyaya eklemeniz gerekebilir.


2

Ben de benzer bir sorun yaşadım. Sorunum aşağıdakileri yaparak çözüldü:

resim açıklamasını buraya girin

resim açıklamasını buraya girin


2

hiç kimse sistemde System.Data.SqlClient yüklü olup olmadığını ve ona bir başvuru yapılıp yapılmadığını kontrol bahsetmiş gibi görünüyor.

System.Data.SqlClient yükleyip app.Config yeni bir sağlayıcı ekleyerek sorunumu çözdü

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>

1

Ayrıca, başlangıç ​​projenizi dbcontext'inizi (veya ilgili app.config) içeren proje olduğundan emin olun. Mine, gerekli tüm yapılandırma ayarlarına sahip olmayan bir web sitesi projesi başlatmaya çalışıyordu.


1

Yukarıdakilerin neredeyse tamamını denedim ve hiçbir şey işe yaramadı.

Ben Varsayılan Proje başvurulan dll set Yalnızca EntityFrameworkve EntityFramework.SqlServerözellikleri Copy Localiçin Trueçalışmaya başlaması mi!


1

Herkes dikkatinizi iki dll EntityFramework.dll ve EntityFramework.SqlServer.dll DataAccess katman kitaplığı vardır ve görünümde veya başka bir layer.it bunları kullanmak Mantıksal değil sorununuzu çözer ama mantıklı değil.

mantıksal yol, enitiess özelliğinin bunları Fluent API ile kaldırması ve değiştirmesidir. bu gerçek bir çözümdür


1

Bir konsol uygulamam ve sınıf kütüphanem vardı. Sınıf kütüphanesinde Varlık Veri Modeli oluşturdum (Sınıf Kitaplığı> Ekle> Yeni Öğe> Veri> ADO.NET Varlık Veri Modeli 6.0'a sağ tıklayın) ve konsol uygulamasının içine referans koydum. Yani, sınıf kütüphanesine referans olan konsol uygulamanız var ve sınıf içi kütüphanede EF modeliniz var. Tablodan bazı kayıtları almaya çalıştığımda aynı hatayla karşılaştım.

Aşağıdaki adımları izleyerek bu sorunu çözdüm:

  1. Çözüme sağ tıklayın ve 'Çözüm için NuGet Paketlerini Yönet' seçeneğini belirleyin, NuGet paket yöneticisi penceresi görünecektir.
  2. 'Yüklü paketler' altındaki 'Yönet' seçeneğine gidin İPUCU: Entity Framework, Sınıf Kütüphanesine eklenir, böylece 'Yüklü paketler' altında EntityFramework olur ve 'Yönet' seçeneğini görürsünüz
  3. 'Yönet' seçeneğine tıklayın ve EF modelini barındıran sınıf kütüphanesine referans olan projeye paket yüklemek için kontrol edin (benim durumumda, EF modeli bulunan sınıf kütüphanesine referans olan konsol uygulamasına paketi yüklemek için onay kutusunu ayarladım)

Tüm yapmam gereken bu oldu ve her şey mükemmel çalıştı.

Umarım yardımcı olmuştur.


1

Aynı hata bende de var. Ben sadece benim dbContext benim model herhangi bir sorgu veya listesini almak gibi kullandığımda olur garip:

var results = _dbContext.MyModel.ToList();

Entity Framework'ü yeniden yüklemeyi denedik, düzgün bir şekilde referans aldık, ancak boşuna.

Neyse ki, Nuget'i ALLçözümler için kontrol etmeye , sonra her şeyi güncellemeye veya emin olmaya çalıştıkeverything aynı sürüm olduğundan çünkü iki projenin Web projesinde farklı EF sürümleri olduğunu fark ettik. Ve çalışıyor. Hata gitti.

İşte tüm çözümler için Nuget'i Yönetme ekran görüntüsü:

resim açıklamasını buraya girin


1

Sadece EntityFramework.SqlServer.dll dosyasına bir başvuru eksik. SQL Server kullanan EntityFramework projeleri için başvurmanız gereken iki dosya EntityFramework.SqlServer.dll ve EntityFramework.dll


0

CE db üzerinden Azure üzerinde Sql Server'a geçerken ilgili bir sorun vardı. Sadece 4 saat bunu çözmeye çalışırken boşa. Umarım bu da benzer bir kaderi kurtarabilir. Benim için, benim files.config dosyamda SqlCE başvuru vardı. Kaldırmak tüm sorunumu çözdü ve taşıma işlemlerini kullanmama izin verdi. Gereksiz karmaşık kurulum ve yapılandırma sorunları olan başka bir teknoloji için Microsoft'u Yay.


0

Aynı sorunu yaşadım, sadece App Config dosyasını DBContext'i içeren projeden test projeme kopyaladım


0

Aynı istisna atılmıştı. Dahil ettim

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

ve her şey tekrar çalışmaya döndü ..


0

Mesaj sağlayıcı System.Data.SqlClient eklememiz gerektiğini gösterdiğinden, bu yüzden iki dll içeren EntityFramework nuget paketini yüklememiz gerekiyor, ancak yalnızca konsol uygulaması geliştiriyorsak, EntityFramework.SqlServer.dll referansını eklememiz gerekiyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.