Không tìm thấy nhà cung cấp Khung thực thể nào cho nhà cung cấp ADO.NET với tên bất biến 'System.Data.SqlClient'


543

Sau khi tải xuống EF6 bằng nuget và thử chạy dự án của tôi, nó sẽ trả về lỗi sau:

Không tìm thấy nhà cung cấp Entity Framework nào cho nhà cung cấp ADO.NET với tên bất biến 'System.Data.SqlClient'. Đảm bảo nhà cung cấp được đăng ký trong phần 'entityFramework' trong tệp cấu hình ứng dụng. Xem http://go.microsoft.com/fwlink/?LinkId=260882 để biết thêm thông tin.

nhập mô tả hình ảnh ở đây


Tôi sử dụng EF5 mà không có providersvà các providercông cụ, vì vậy xem xét loại bỏ nó?
ta.speot.is

1
đặt một bản sao của chuỗi kết nối của bạn ở đây
pylover

Chuỗi kết nối có trong hình (App.confing), nhân tiện, tôi gọi hàm tạo public BaseStorage(): base ("RaptorDB") {}, BaseStorage () kế thừa từ DbContext trong EF5 mọi thứ đều hoạt động hoàn hảo, chưa có trong EF6.
Fernando Vellozo

10
Vấn đề sẽ được giải quyết bằng cách cài đặt EF6, dự án thứ hai (Bảng điều khiển), nhờ mọi người đã giúp đỡ bằng mọi cách!
Fernando Vellozo

3
Đối với tôi, điều này dường như là do Visual Studio không nhận ra rằng tập hợp EntityFramework.SqlServer thực sự được sử dụng bởi dự án cơ sở. Nếu bạn làm điều gì đó giống như câu trả lời của @ Carra , bạn không phải thêm EF vào mỗi dự án tham chiếu dự án cơ sở của bạn - sạch sẽ hơn nhiều.
tehDorf

Câu trả lời:


608

Tôi vừa gặp vấn đề tương tự và có vẻ như EntityFramework mặc dù được cài đặt từ NuGet Gói Manager không được cài đặt chính xác trong dự án.

Tôi đã cố gắng khắc phục bằng cách chạy lệnh sau trên Bảng điều khiển quản lý gói :

PM> Install-Package EntityFramework

34
PMC đã viết rằng 'EntityFramework 6.0.1' đã được cài đặt, nhưng đã thêm nó vào ứng dụng bảng điều khiển của tôi (mà chính xác là KHÔNG sử dụng EF), nhưng nó cũng đã giúp tôi rất nhiều. Tôi xóa EF khỏi các tham chiếu ứng dụng bảng điều khiển, trả về lỗi, tôi không nhận được điều này - ứng dụng bảng điều khiển của tôi đang sử dụng dự án kho lưu trữ (sử dụng EF) Cảm ơn sự giúp đỡ!
Prokurors

33
Đừng quên thêm -ProjectName <ProjectName> vào dòng lệnh nếu bạn có một vài dự án trong giải pháp của mình ... !!!
Eugenio Miró

1
Sử dụng -Pretùy chọn báo cho nuget để cài đặt các gói phát hành trước. Tôi không khuyên bạn nên sử dụng nó. Tôi có một lỗi tương tự nhưng giải pháp là chỉ cài đặt EntityFramework trong dự án máy chủ. Tôi đã cài đặt nó trong một thư viện lớp nhưng không phải trong dự án chính (web / console / hoặc bất cứ thứ gì),
Davide Icardi

10
Cùng một vấn đề ở đây. Tôi đã có một dự án không có tham chiếu đến EF nhưng dll EF nằm trong thư mục Debug. Chạy lệnh này chống lại dự án này được thêm vào EntityFramework.SqlServer.dllthư mục Debug - vấn đề đã được giải quyết.
qujck

4
Trong tình huống của tôi, lỗi này không xuất hiện cho đến khi tôi triển khai dự án lên máy chủ thử nghiệm của chúng tôi. Thật vậy, đó là EntityFramework.SqlServer.dll đã bị thiếu và cài đặt EF thông qua trình quản lý gói. Nó chỉ thêm hai tham chiếu có liên quan đến dự án và sau đó thêm cài đặt entityFramework vào web.config. Tôi đoán IIS cục bộ có thể nguồn lắp ráp cục bộ nhưng IIS đầy đủ trên máy chủ web không thể do quyền?
Tham dự

384

Bạn đã thêm EF vào một dự án thư viện lớp. Bạn cũng cần thêm nó vào dự án tham chiếu nó (ứng dụng bảng điều khiển, trang web của bạn hoặc bất cứ điều gì).


247
Đây là một câu trả lời hoàn toàn vô lý. Tại sao trên trái đất tôi cần phải làm điều đó? Và bạn có biết điều gì còn kỳ cục hơn? Nó hoạt động.
Robert

19
Xem câu trả lời của tôi dưới đây, bạn không cần phải cài đặt EF trong ứng dụng bảng điều khiển của mình.
Francisco Goldenstein

7
Bạn trả lời đúng. Chỉ thêm tham chiếu EntityFramework.SqlServer.dll vào dự án frontend sử dụng thư viện với EF, khắc phục sự cố. Vì vậy, không sử dụng EF này (chỉ DLL)
báo cáo

31
Bạn không phải thêm một tham chiếu đến EF trong ứng dụng bảng điều khiển / web. Bạn chỉ cần đảm bảo EntityFramework.SqlServer.dllđược sao chép vào thư mục bin. Thêm một tham chiếu mạnh có thể phá vỡ kiến ​​trúc của bạn (nếu bạn xây dựng nhiều tầng, hội đồng thực thi cấp cao nhất của bạn thậm chí không nên biết về EF). Thay vào đó, bạn có thể đảm bảo nhà cung cấp SQL Server được sao chép. Xem ví dụ stackoverflow.com/a/19130718/870604
ken2k

3
Tôi nghi ngờ lý do EntityFramework.SqlServer.dll không được phát hiện là phụ thuộc là vì Entity Framework tải nó một cách linh hoạt. Làm thế nào là dự án của bạn phải biết để sao chép qua nhà cung cấp SQL khi tham chiếu duy nhất đến nó nằm trong tệp cấu hình?
Joel McBeth

209

Bạn không cần phải cài đặt Entity Framework trong ứng dụng Console của mình, bạn chỉ cần thêm một tham chiếu đến tập hợp EntityFramework.SqlServer.dll. Bạn có thể sao chép tập hợp này từ dự án Thư viện lớp sử dụng Entity Framework vào thư mục LIB và thêm một tham chiếu đến nó.

Tóm tắt:

  • Ứng dụng thư viện lớp:
    • Cài đặt khung thực thể
    • Viết mã lớp dữ liệu của bạn
    • Tệp app.config có tất cả các cấu hình liên quan đến Entity Framework ngoại trừ chuỗi kết nối.
  • Tạo một ứng dụng Console, web hoặc máy tính để bàn:
    • Thêm một tài liệu tham khảo cho dự án đầu tiên.
    • Thêm một tham chiếu đến EntityFramework.SqlServer.dll.
    • app.config / web.config có chuỗi kết nối (hãy nhớ rằng tên của mục cấu hình phải giống với tên của lớp DbContext.

Tôi hy vọng nó sẽ giúp.


18
Câu trả lời chính xác. KHÔNG cần phải cài đặt EF. EntityFramework.SqlServer.dll.
Tom Stickel

15
Tôi phải đồng ý. Đây hoàn toàn là câu trả lời đúng. Tham chiếu một dll là 1/2 mb hoặc kéo dự án nuget EF có giá trị> 5,5 mb. Giảm một chút giá trị của kiến ​​trúc nhiều tầng quá. Chương trình kém từ MS thực sự: Tôi có 4 tầng và tầng trên cùng của tôi thực sự không có lý do để biết bất cứ điều gì về EF
72GM

18
Dù sao vẫn vô lý. ví dụ: Tại sao một giao diện người dùng sẽ cần một tham chiếu đến SqlServer? Mặt trước không thể quan tâm ít hơn, trong trường hợp của tôi. Nhưng nó đã có tác dụng. +1
Mike de Klerk

2
Điều này rất hữu ích. Cảm ơn rất nhiều.
peter_the_oak

1
Điều này có làm khó cập nhật các phiên bản của EntityFramework không? Bạn phải nhớ đi và cập nhật tham chiếu đến DLL
nghiền nát

114

Bạn cũng có thể thấy thông báo này nếu bạn quên bao gồm "EntityFramework.SqlServer.dll".

Nó dường như là một tệp mới được thêm vào trong EF6. Ban đầu tôi đã không đưa nó vào mô-đun hợp nhất của mình và gặp vấn đề được liệt kê ở đây.


7
Tôi gặp phải vấn đề này khi trước đây tôi có một dự án (a) có tham chiếu đến một dự án (b) có tham chiếu đến EF. Sau khi làm sạch và xóa thư mục bin của dự án (a), sau đó xây dựng lại, tham chiếu EF xuất hiện, nhưng không phải là EF.SqlServer.dll. Sao chép này trong công việc thủ công cho tôi
dan richardson

2
@dan richardson cảm ơn bạn đã đề cập đến 'xóa thư mục bin'.
Rajshekar Reddy

Tôi đã gặp lỗi khi cố chạy tập lệnh LINQPad sau khi nâng cấp EF6. Ngay cả việc tham khảo EntityFramework.SqlServer.dll trong LINQPad cũng không khắc phục được UNTIL Tôi đã xây dựng lại giải pháp của mình trong VS2013. Tham chiếu mới sau đó được giải quyết đúng cách trong LINQPad và tập lệnh của tôi đã chạy!
Chris

Trong trường hợp của tôi, tôi đã ổn ở môi trường dev nhưng khi tôi xuất bản xuất hiện vấn đề được tham chiếu. Sau khi so sánh danh sách các thư viện trong dev với thư mục bin trong máy chủ, tôi nhận thấy sự vắng mặt của EntityFramework.SqlServer.dll, tôi chỉ để tải lên và làm mới ứng dụng và sửa lỗi cho ứng dụng.
Henry Rodriguez

Đây là vấn đề đối với tôi, cảm ơn! Xem giải pháp sạch của @Anders để tránh các vấn đề quên bao gồm DLL trong mỗi dự án bắt buộc.
SharpC

54

Thay vì thêm EntityFramework.SqlServer vào dự án lưu trữ, bạn có thể đảm bảo tham chiếu tĩnh đến nó từ dự án Mô hình / thực thể của bạn như thế này

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

Điều này sẽ làm cho quá trình xây dựng bao gồm lắp ráp với dự án máy chủ.

Thông tin thêm trên blog của tôi http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


5
Tôi nghĩ rằng đây là một giải pháp sạch đẹp, trong đó chúng ta không cần phải bao gồm các tài liệu tham khảo về các DLL liên quan đến sự kiên trì trong các dự án nên là thuyết bất khả tri.
JTech

3
Đồng ý, và nó áp dụng cho bất kỳ thư viện nào có sự phụ thuộc ngầm không chỉ là sự kiên trì
Anders

3
Khi bạn có một phụ thuộc rõ ràng vào một loại trong một cụm, nó sẽ được sao chép bởi quá trình xây dựng. Tuy nhiên, ở đây bạn không có sự phụ thuộc rõ ràng và quá trình xây dựng sẽ không thể sao chép cụm vào thư mục bản dựng. Mã của tôi chỉ đảm bảo tồn tại một tham chiếu rõ ràng cho bất kỳ loại nào trong hội đồng nói trên.
Anders

2
Không có nó, không có sự phụ thuộc rõ ràng vào hội đồng từ mã của bạn và nó sẽ không được sao chép vào đầu ra
Anders

2
Điều này thật tuyệt vời.
Kris

48

Khi bạn cài đặt Entity Framework 6 thông qua Nuget. EntityFramework.SqlServer đôi khi bỏ lỡ một thực thi khác. Đơn giản chỉ cần thêm Nugetgói vào dự án đó.

Đôi khi ở trên không hoạt động cho Dự án thử nghiệm

Để giải quyết vấn đề này trong Dự án thử nghiệm, chỉ cần đặt Phương thức này trong Dự án thử nghiệm:

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

Phương pháp này không bao giờ được gọi, nhưng theo quan sát của tôi, trình biên dịch sẽ loại bỏ tất cả các cụm "không cần thiết" và không sử dụng các EntityFramework.SqlServercông cụ kiểm tra thất bại.


2
Chà điều này không đẹp nhưng nó đã khắc phục vấn đề tôi gặp phải trong dự án thử nghiệm của mình. Không có giải pháp nào khác làm việc.
Chow đáng kính

Trong trường hợp của tôi, việc thêm Entity Framework vào dự án thử nghiệm của tôi là đủ "Quản lý gói Nuget cho giải pháp"
Juha Palomäki

thực tế bạn cần đưa vào bất kỳ dự án nào (không chỉ kiểm tra) để được bảo đảm rằng System.Data.Entity.SqlServer sẽ được đưa vào "kết quả lib set" sau khi biên dịch (lưu ý: Unity hoặc công cụ IoC khác có thể thay đổi quy tắc này và bạn sẽ cần gọi mã này từ dự án thử nghiệm).
La Mã Pokrovskij

Đây thực sự là giải pháp tốt nhất, vì bạn không phải phun các tham chiếu khung thực thể ở mọi nơi trong dự án của mình.
Daniel Lobo

Điều này chỉ cho tôi đi đúng hướng. Nó EntityFramework.SqlServerđược thêm vào thư viện lớp của bạn, nhưng nếu không được sử dụng, nó sẽ không được đặt trong thư mục đầu ra của ứng dụng của bạn. Tôi đã khắc phục vấn đề bằng cách thêm một ExecutionStrategycái mà tôi vẫn cần phải làm, vì vậy việc thêm một dòng như SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());bên trong một DbConfigurationlớp đã khắc phục vấn đề.
Jan_V

24

Thêm chức năng này

private void FixEfProviderServicesProblem()

đến lớp ngữ cảnh cơ sở dữ liệu trong lớp thư viện và DLL EntityFramework.SqlServer.dll bị thiếu sẽ được sao chép vào đúng chỗ.

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

.


xin lỗi đã cố gắng thu hồi nó ... vì tôi không nghĩ nó sẽ hoạt động ... và nó thì có! ... nó nói rằng tôi không thể thay đổi phiếu bầu của mình, trừ khi câu trả lời được chỉnh sửa, vì nó đã quá lâu và kể từ đó bị khóa ...
Seabizkit

Điều này làm việc cho tôi quá. Chúng tôi có một dự án thư viện sử dụng EF 6 và một ứng dụng giao diện điều khiển sử dụng thư viện. Chúng tôi đã nhận được ngoại lệ tương tự như OP. Chúng tôi không muốn đặt cấu hình dành riêng cho EntityFramework trong tệp cấu hình ứng dụng, vì vậy phương pháp này hiệu quả với chúng tôi. Cảm ơn
Cướp

1
Bạn gọi FixEfProviderServicesProblemtôi đã cố gắng ở đâu trong nhà xây dựng, không có may mắn.
Phanxicô Ducharme

1
Tôi không bao giờ gọi nó - không phải. Thực tế là có .net nghĩ rằng nó cần thiết và bao gồm EntityFramwork là sự phụ thuộc.
Johannes

Có lẽ từ stackoverflow.com/a/19130718/1467394 ? Nhưng +1, dù sao đi nữa cho rõ ràng về cách / nơi sử dụng nó.
David

20

Không ai trong số này làm việc cho tôi. Tôi đã tìm thấy giải pháp trong một câu hỏi stackoverflow khác . Tôi sẽ thêm nó ở đây để tham khảo dễ dàng:

Bạn cần tạo một tham chiếu, vì vậy nó sẽ được sao chép trong đường dẫn ứng dụng den. Bởi vì sau này nó sẽ được tham chiếu trong thời gian chạy. Vì vậy, bạn không cần phải sao chép bất kỳ tập tin.

private volatile Type _dependency;

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

2
Điều này! Không cần thêm một tham chiếu đến các dự án khác có thể tham chiếu lắp ráp này.
tehDorf

8

Tôi đã gặp lỗi tương tự khi sử dụng Entity Framework 6 với SQL Server Compact 4.0. Bài viết về MSDN cho Entity Framework Providers cho EF6 rất hữu ích. Chạy các lệnh nhà cung cấp tương ứng dưới dạng các gói nuget trong Gói quản lý gói có thể giải quyết vấn đề, vì các gói NuGet sẽ tự động thêm đăng ký vào tệp cấu hình. Tôi chạy PM> Install-Package EntityFramework.SqlServerCompactđi giải quyết vấn đề.


2
Tôi thực sự ngạc nhiên không ai bỏ phiếu cho điều này cho đến nay! Thông báo lỗi nêu rõ: lý do lỗi là do sau khi nâng cấp EF, thực sự không còn định nghĩa nhà cung cấp nào cho SQL Compact trong tệp web.config của ứng dụng! Thêm gói bạn đề cập sẽ sửa tệp web.config và sẽ có nhà cung cấp xác định.
Csaba Toth

1
Đơn giản là cứu người. Nó nên được đánh dấu là câu trả lời vì nó cung cấp giải pháp rõ ràng cho vấn đề
ZafarYousafi

7

Gặp vấn đề này ngày hôm nay khi làm việc với một tập hợp các dịch vụ web, mỗi dự án khác nhau và một dự án riêng biệt chứa các thử nghiệm tích hợp cho một số dịch vụ đó.

Tôi đã sử dụng thiết lập này một thời gian với EF5, mà không cần bao gồm các tham chiếu đến EF từ Dự án Kiểm tra Tích hợp.

Bây giờ, sau khi nâng cấp lên EF6, có vẻ như tôi cũng cần bao gồm một tham chiếu đến EF6 trong dự án thử nghiệm tích hợp, mặc dù nó không được sử dụng ở đó (khá nhiều như đã chỉ ra ở trên bởi user3004275 ).

Các dấu hiệu bạn đang đối mặt với cùng một vấn đề:

  • Các cuộc gọi trực tiếp đến EF (kết nối với DB, nhận dữ liệu, v.v.) hoạt động tốt, miễn là chúng được bắt đầu từ một dự án có tham chiếu đến EF6.
  • Các cuộc gọi đến dịch vụ thông qua giao diện dịch vụ được công bố hoạt động tốt; tức là không thiếu tài liệu tham khảo "nội bộ" trong dịch vụ.
  • Gọi trực tiếp đến các phương thức công khai trong dự án dịch vụ, từ một dự án bên ngoài dịch vụ, sẽ gây ra lỗi này, mặc dù EF không được sử dụng trong chính dự án đó; chỉ nội bộ trong dự án được gọi là

Điểm thứ ba là những gì đã ném tôi đi trong một thời gian, và tôi vẫn không chắc tại sao điều này là bắt buộc. Việc thêm một tham chiếu vào EF6 trong dự án Kiểm tra tích hợp của tôi đã giải quyết nó trong mọi trường hợp ...


7

Khi xảy ra lỗi trong các dự án thử nghiệm, giải pháp đẹp nhất là trang trí lớp thử nghiệm với:

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

Nó thực sự khá đẹp, nhưng tạo ra nhiều công việc hơn và dễ quên hơn. Với thủ thuật "tham chiếu bắt buộc", bạn chỉ cần thực hiện nó trên (các) dự án thực sự cần sử dụng EF.
Charles Roberto Canato 23/2/2016

7

Dự án khởi động tham chiếu dự án nơi Entity Framework đang được sử dụng cần hai tập hợp sau trong thư mục bin của nó:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Thêm một <section>vào <configSections>tệp .config trong dự án khởi động làm cho tập hợp đầu tiên có sẵn trong thư mục bin đó. Bạn có thể sao chép tệp này từ tệp .config của dự án Entity Framework của bạn:

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

Để làm cho tệp thứ hai có sẵn trong thư mục bin, mặc dù không thực tế, một bản sao thủ công từ thư mục bin của dự án Entity Framework có thể được tạo. Một cách khác tốt hơn là thêm vào các sự kiện sau khi xây dựng của dự án Entity Framework, các dòng sau sẽ tự động hóa quy trình:

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

2
Cảm ơn, tôi có khung Entity trong một lớp dữ liệu nên nó bị cô lập nhưng thật không may là microsoft sẽ không cho phép chúng tôi thực sự cô lập lớp dữ liệu và khiến chúng tôi gây ô nhiễm ux với công nghệ cơ sở dữ liệu. Tôi đã hy vọng tôi sẽ không phải làm điều đó.
Matt

4

Tôi chỉ gặp vấn đề này ngày hôm nay. Tôi có thư viện lớp kho lưu trữ dữ liệu với gói EF63 NuGet và ứng dụng bảng điều khiển để thử nghiệm, chỉ tham chiếu đến dự án thư viện lớp. Tôi đã tạo lệnh hậu xây dựng rất đơn giản, sao chép EntityFramework.SqlServer.dll từ thư mục Bin \ Debug của thư viện sang thư mục Bin \ Debug của ứng dụng và giải quyết vấn đề. Đừng quên thêm phần entityFramework vào tệp .config của ứng dụng.


4

Thêm bên dưới vào app.config của bạn.

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

Bạn cũng cần phải đăng ký nó để <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove

Đây là những gì "IInstall-Gói EntityFramework" làm. Điều này không thực sự cần thiết bởi vì EntityFramework theo mặc định cố gắng tải EntityFramework.SqlServer.dll cho tên bất biến SqlClient. Phương pháp này có thể được sử dụng để thay thế nhà cung cấp.
dùng1295211

3

Xóa thư mục BIN đã làm điều đó cho tôi


3

Bạn nên buộc tham chiếu tĩnh vào cụm EntityFramework.SqlServer.dll , nhưng thay vì đặt mã giả, bạn có thể thực hiện việc này theo cách đẹp hơn:

  1. Nếu bạn đã có lớp DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Nếu bạn không có lớp DbConfiguration, bạn phải đặt mã sau đây khi khởi động ứng dụng (trước khi sử dụng EF):

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

2

Tôi vừa cài đặt lại Entity Framework bằng Nuget. Và làm theo hướng dẫn được viết trên liên kết dưới đây: http://robsneuron.blogspot.in/2013/11/entity-framework-upTHER-to-6.html

Tôi nghĩ rằng vấn đề sẽ được giải quyết.


Một lời giải thích sẽ tốt đẹp! Tại sao bạn phải cài đặt lại và cứ thế
Rizier123

1
Bởi vì đối với một số lý do không xác định, các thay đổi sẽ không có hiệu lực và vì vậy tôi đã cài đặt lại EntityFramework 6.1.1 và sau đó nó sẽ có hiệu lực.
Kuntal Ghosh

2

Mở rộng tệp YourModel.edmx và mở lớp YourModel.Context.cs trong YourModel.Context.tt.

Tôi đã thêm dòng sau vào phần sử dụng và lỗi đã được sửa cho tôi.

sử dụng SqlProviderService = System.Data.Entity.SqlServer.SqlProviderService;

Bạn có thể phải thêm dòng này vào tệp mỗi khi tệp được tạo tự động.


2

Tôi cũng có một vấn đề tương tự. Vấn đề của tôi đã được giải quyết bằng cách làm như sau:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


2

Dường như không ai đề cập đến việc kiểm tra đầu tiên nếu System.Data.SqlClient được cài đặt trong hệ thống và nếu tham chiếu được thực hiện cho nó.

tôi đã giải quyết vấn đề của mình bằng cách cài đặt System.Data.SqlClient và thêm một nhà cung cấp mới trong app.Config

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

1

Ngoài ra, hãy chắc chắn rằng dự án khởi động của bạn là dự án chứa dbcontext của bạn (hoặc app.config có liên quan). Mine đã cố gắng khởi động một dự án trang web không có tất cả các cài đặt cấu hình cần thiết.


1

Tôi đã thử gần như tất cả các bên trên và không có gì làm việc.

Chỉ khi tôi đặt các DLL được tham chiếu trong Dự án mặc định EntityFrameworkEntityFramework.SqlServercác thuộc tính Copy Localđể Truenó bắt đầu hoạt động!


1

mọi người tôi cần chú ý rằng hai dll EntityFramework.dll và EntityFramework.SqlServer.dll là Thư viện lớp DataAccess Và không hợp lý khi sử dụng chúng trong chế độ xem hoặc bất kỳ lớp nào khác. Nó giải quyết vấn đề của bạn nhưng nó không logic.

cách logic là thuộc tính enitiess loại bỏ và thay thế chúng bằng Fluent API. Đây là giải pháp thực sự


1

Tôi đã có một ứng dụng giao diện điều khiển và thư viện lớp. Trong thư viện lớp tôi đã tạo Mô hình dữ liệu thực thể (nhấp chuột phải vào Thư viện lớp> Thêm> Mục mới> Dữ liệu> Mô hình dữ liệu thực thể ADO.NET 6.0) và đặt tham chiếu trong ứng dụng bảng điều khiển. Vì vậy, bạn có ứng dụng bảng điều khiển có tham chiếu đến thư viện lớp và bên trong thư viện lớp bạn có mô hình EF. Tôi đã có cùng một lỗi khi tôi cố gắng để có được một số hồ sơ từ bảng.

Tôi đã giải quyết vấn đề này bằng cách làm theo các bước sau:

  1. Nhấp chuột phải vào giải pháp và chọn tùy chọn 'Quản lý gói NuGet cho Giải pháp' và cửa sổ trình quản lý gói NuGet sẽ hiển thị.
  2. Đi tới tùy chọn 'Manage' trong 'Gói đã cài đặt' MIPO: Entity Framework được thêm vào Thư viện lớp, do đó bạn sẽ có EntityFramework trong 'Gói đã cài đặt' và bạn sẽ thấy 'Manage'option
  3. Nhấp vào tùy chọn 'Manage' và kiểm tra để cài đặt gói để dự án có tham chiếu đến thư viện lớp chứa mô hình EF (trong trường hợp của tôi, tôi đặt hộp kiểm để cài đặt gói vào ứng dụng bảng điều khiển có tham chiếu đến thư viện lớp có mô hình EF bên trong)

Đó là tất cả những gì tôi phải làm và mọi thứ hoạt động hoàn hảo.

Tôi hy vọng nó đã giúp.


1

Tôi có cùng một lỗi. Thật kỳ lạ khi nó chỉ xảy ra bất cứ khi nào tôi sử dụng dbContext của mình để truy vấn bất kỳ mô hình nào của tôi hoặc nhận danh sách của nó như:

var results = _dbContext.MyModel.ToList();

Chúng tôi đã cố gắng cài đặt lại Entity Framework, tham chiếu đúng cách nhưng không có kết quả.

May mắn thay, chúng tôi đã cố gắng kiểm tra Nuget để tìm ALLgiải pháp, sau đó cập nhật mọi thứ hoặc đảm bảoeverything là cùng một phiên bản vì chúng tôi nhận thấy rằng hai dự án có các phiên bản EF khác nhau trên dự án Web. Và nó hoạt động. Lỗi không còn nữa.

Dưới đây là ảnh chụp màn hình về cách Quản lý Nuget cho tất cả các giải pháp:

nhập mô tả hình ảnh ở đây


1

Bạn chỉ thiếu một tham chiếu đến EntityFramework.SqlServer.dll. Đối với các dự án EntityFramework sử dụng SQL Server, hai tệp bạn cần tham khảo là EntityFramework.SqlServer.dll và EntityFramework.dll


0

Tôi gặp vấn đề liên quan khi di chuyển từ db db sang Sql Server trên Azure. Chỉ lãng phí 4 giờ cố gắng để giải quyết điều này. Hy vọng điều này có thể cứu ai đó một số phận tương tự. Đối với tôi, tôi đã có một tham chiếu đến SqlCE trong tệp tests.config. Loại bỏ nó đã giải quyết toàn bộ vấn đề của tôi và cho phép tôi sử dụng di chuyển. Yay Microsoft cho một công nghệ khác với các vấn đề thiết lập và cấu hình phức tạp không cần thiết.


0

Tôi gặp vấn đề tương tự, chỉ sao chép tệp Cấu hình ứng dụng từ dự án có chứa DBContext vào dự án thử nghiệm của tôi


0

Tôi đã ném ngoại lệ giống hệt nhau. Tôi đã bao gồm

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

và mọi thứ trở lại hoạt động trở lại ..


0

Như thông báo cho thấy rằng chúng ta cần thêm nhà cung cấp System.Data.SqlClient, đó là lý do tại sao chúng ta cần cài đặt gói nuget của EntityFramework có hai dll nhưng nếu chúng ta chỉ phát triển ứng dụng bảng điều khiển thì chúng ta chỉ cần thêm tham chiếu của EntityFramework.SqlServer.dll

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.