Loại nhà cung cấp khung thực thể không thể được tải?


420

Tôi đang cố gắng chạy thử nghiệm trên TeamCity hiện đang được cài đặt trên máy của tôi.

System.InvalidOperationException:

Loại nhà cung cấp Entity Framework ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'cho System.Data.SqlClientnhà cung cấp ' 'ADO.NET không thể tải được. Đảm bảo lắp ráp nhà cung cấp có sẵn cho ứng dụng đang chạy.

Xem http://go.microsoft.com/fwlink/?LinkId=260882 để biết thêm thông tin ..

Tôi không có tài liệu tham khảo System.Data.Entitytrong bất kỳ dự án nào của mình như đã được đề xuất trên codeplex để nâng cấp lên EF6.

Vì vậy, tôi không chắc tại sao tôi lại nhận được ngoại lệ này. Tôi không nhận được bất kỳ ngoại lệ nào như vậy khi tôi chạy thử nghiệm từ VS.

Tôi đã cố gắng đặt CopyLocal thành false rồi lại thành true .. nhưng điều đó dường như cũng không hoạt động.

Cập nhật

App.config của tôi có như sau. Điều này có gây ra một số hành vi mà tôi không hiểu?

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

Tôi nhận được stacktrace sau trong teamcity.

[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 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..
[03:59:11]
[IntegrationTests.CrudTest+QuestionTest.Create]     at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName)
   at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName)
   at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory)
   at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
   at System.Data.Entity.DbSet`1.Add(TEntity entity)
   at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22
   at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34

1
EntityFramework.SqlServer.dll có được triển khai cùng với EntityFramework.dll không? Trong các nhà cung cấp S6Server và SqlServerCE của EF6 không cùng lắp ráp với động cơ EF như với các phiên bản trước. Bạn không nên thêm một tham chiếu đến System.Data.Entity.dll. Mô hình nhà cung cấp trong EF6 đã thay đổi so với nhà cung cấp EF5 và EF5 sẽ không hoạt động. Ngoài ra, bạn có thể gặp một số vấn đề khó khăn (như các loại không gian địa lý của EF5 được coi là các loại thực thể trong EF6)
Pawel

Có, tôi đã kiểm tra hai lần, không có tham chiếu nào đến System.Data.Entity và các tham chiếu đến cả EntityFramework.dll và EntityFramework.SqlServer.dll đều có mặt. Một lần nữa các projetc biên dịch và thử nghiệm chạy trong VS. Chỉ đến khi tôi chạy thử nghiệm trên TeamCity thì lỗi mới tăng lên.
ashutosh raina

Đây là một thiết lập chính xác. Tôi chưa sử dụng TeamCity nhưng với tôi, khi ứng dụng của bạn được triển khai để chạy thử nghiệm với TeamCity, EntityFramework.SqlServer.dll bị thiếu và do đó là ngoại lệ.
Pawel

1
xem câu trả lời từ bài đăng này: stackoverflow.com/questions/21175713/ Từ Tôi đã thêm private volatile Type _dependency...câu trả lời và nó đã hoạt động! Nó chỉ hôi thối rằng tôi phải thêm một lớp riêng như thế này chỉ để khiến EF hoạt động trong TeamCity.
a11smiles

2
Tôi đã gỡ cài đặt EntityFramework khỏi các gói nuget và cài đặt lại và nó đã được sửa
abhyudayasrinet

Câu trả lời:


426

Cùng một vấn đề, nhưng tôi đã cài đặt EF 6 thông qua Nuget. EntityFramework.SqlServer bị thiếu cho một tệp thực thi khác. Tôi chỉ cần thêm gói nuget vào dự án đó.


108
Tôi cũng nhận thấy điều này. Nếu bạn tạo một thư viện sử dụng EF, VS sẽ đặt EF.dll và EF.SqlServer.dll vào thư mục bản dựng đó. Nhưng nếu bây giờ bạn có một chương trình khác sử dụng thư viện của mình, chỉ có EF.dll sẽ được đưa vào thư mục bản dựng này. Thiếu EF.SqlServer.dll. Nếu bạn thêm nó thủ công vào thư mục xây dựng, chương trình sẽ hoạt động. Bản thân nó không phải là một giải pháp tốt, nhưng cho thấy vấn đề là thiếu EF.SQLServer.dll là nguyên nhân gây ra lỗi.
Eric

44
Tôi đã thêm var x = typeof (System.Data.Entity.SqlServer.SqlProviderService); Sau đó, ứng dụng của tôi đã hoạt động
Brian

33
Tôi luôn lo lắng khi tôi gõ mã trong đó hoàn toàn không có gì và tất cả các dự án của tôi đột nhiên chạy. O_o
Jordan

10
Ngoài ra, vì tối ưu hóa trình biên dịch, bạn có thể muốn thực hiện x.ToString()hoặc nó sẽ đưa ra typeofs trong Bản phát hành.
Jordan

15
Tôi thấy khó chịu khi bây giờ EF 6.1 cần cài đặt EF trên DLL / Project ASPX của tôi, trong khi đó EF 5.0 chỉ cần nó trên DLL / Project lớp dữ liệu của tôi.
PeterX

274

Tôi đã gặp vấn đề tương tự trong các dự án Thử nghiệm của mình - Tôi đã cài đặt các bit EF6 mới nhất thông qua NuGet và mỗi khi tôi gọi một cái gì đó liên quan đến EF tôi nhận được:

Nhà cung cấp Entity Framework loại 'System.Data.Entity.SqlServer.SqlProviderService, EntityFramework.SqlServer' cho nhà cung cấp ADO.NET 'System.Data.SqlClient' không thể tải được. Đảm bảo lắp ráp nhà cung cấp có sẵn cho ứng dụng đang chạy. Xem http://go.microsoft.com/fwlink/?LinkId=260882 để biết thêm thông tin.

Cách giải quyết của tôi: Tôi đã đặt phương thức này trong dự án thử nghiệm của mình:

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

Phương thức này không bao giờ được gọi, nhưng tôi nghĩ 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 EntityFramework.SqlServer để kiểm tra thất bại.

Dù sao: Hoạt động trên máy của tôi;)

Lưu ý: Thay vì thêm phương thức để kiểm tra dự án, bạn có thể đảm bảo tham chiếu tĩnh đến SqlProviderService từ dự án Mô hình / thực thể của bạn .


24
Tôi cuối cùng đã làm như vậy. Tôi muốn nói chuyện với người đã khiến hội đồng này phụ thuộc vào việc mở kết nối tới db. Trong vũ trụ thay thế của họ, tất cả các dự án lối vào của chúng tôi có tệp cấu hình với chuỗi kết nối nên tham chiếu EntityFramework chỉ để có được một dll này để mở kết nối. Theo cách nào thì điều này có ý nghĩa tôi không hiểu.
juhan_h

3
Đó là một hack, nhưng đó là giải pháp tốt nhất / dễ nhất mà tôi đã tìm thấy cho kịch bản mà bạn không có gói triển khai được tạo cho dự án của mình.
Kon

3
Đối với tất cả các bạn sử dụng các đề xuất khác như "var x = typeof (SqlProviderService);". Chỉ có giải pháp này được cung cấp bởi Robert hoạt động trên các máy phát triển và xây dựng !!!
Alexander Schmidt

3
Cảm ơn Robert, thật là nực cười bởi đội ngũ của EF, nhưng dù sao thì điều đó cũng hiệu quả với tôi.
Hitesh

7
Để rõ ràng: Thêm mã trên vào DbContextlớp của bạn sẽ giải quyết vấn đề trong EF 6.1. Bằng cách này, bạn không cần phải bao gồm gói Nuget Entity trong dự án mặt trước (WebApi, v.v.) và có thể để mọi thứ liên quan đến EF trong lớp dữ liệu của bạn.
Nick

106

Nuget sẽ cấu hình dự án EF6 của bạn để tham khảo EntityFramework.SqlServer.dll. Điều này triển khai vào thư mục đầu ra cho dự án EF6 của bạn trong quá trình xây dựng, nhưng nó sẽ không triển khai đến thư mục đầu ra cho các dự án tham chiếu dự án EF6 của bạn. Tôi tin rằng điều này là do Visual Studio đủ "thông minh" để phát hiện ra rằng không có gì trong hội đồng của bạn thực sự sử dụng dll trực tiếp và do đó không bao gồm nó. Bạn có thể buộc EntityFramework.SqlServer.dll được triển khai vào thư mục đầu ra của các dự án tham chiếu dự án EF6 của bạn (kiểm tra đơn vị, giao diện người dùng, v.v.) bằng cách thêm mã vào dự án EF6 của bạn sử dụng EntityFramework.SqlServer.dll. Hãy cẩn thận để không đặt mã trong một lớp được tạo vì bạn có nguy cơ mất nó vào regen tiếp theo. Tôi đã chọn để thêm lớp sau vào hội đồng, đã khắc phục vấn đề.

using System.Data.Entity.SqlServer;

internal static class MissingDllHack
{
    // Must reference a type in EntityFramework.SqlServer.dll so that this dll will be
    // included in the output folder of referencing projects without requiring a direct 
    // dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360.
    private static SqlProviderServices instance = SqlProviderServices.Instance;
}

1
Điều này đã giải quyết vấn đề cho tôi liên quan đến MSTest. Tôi thích phương thức này vì nó không yêu cầu tôi làm bất cứ điều gì lộn xộn với kế thừa lớp trên các lớp kiểm tra của tôi. Chỉ cần bao gồm các lớp ở đâu đó trong hội đồng thử nghiệm và MAGIC. Cảm ơn!
kbrimington 9/2/2015

Chính xác, đây là lý do nó không sao chép sqlserver.dll vào đầu ra dự án tham chiếu. Điều này xảy ra khi bạn có thêm một lớp ở giữa thực thi ứng dụng và ngữ cảnh. Cảm ơn điều này đã giải quyết vấn đề của tôi.
Bharat

2
Đối với những người không muốn dành 4 giây để tìm kiếm nó: sử dụng System.Data.Entity.SqlServer;
TTT

Chúng tôi sử dụng một lớp cơ sở chung cho các bài kiểm tra đơn vị, tất cả các bài kiểm tra đơn vị kế thừa từ lớp này. Thêm phương thức này vào một lớp đó có nghĩa là tất cả các dự án có lớp kiểm thử đơn vị kế thừa từ lớp cơ sở đều hoạt động tốt.
MaxJ

3
Điểm nhỏ, nhưng có lẽ tốt nhất là thêm một nhận xét cho lớp này để giải thích tại sao cần thiết.
John Darvill

43

Giải pháp của tôi là loại bỏ khung thực thể khỏi dự án thông qua trình quản lý nuget và thêm nó vào lại.


9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
VahidN

Điều này hiệu quả với tôi và tôi nghĩ đó có thể là giải pháp tối ưu
ccoutinho

Giải pháp đơn giản, sạch sẽ mà hiệu quả. Nên cao hơn nhiều trong danh sách
mode777

29

Tôi đã giải quyết điều này bằng cách thêm một stent sử dụng trên đầu lớp DBContext của tôi, như vậy:

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

1
Đây là giải pháp sạch nhất cho vấn đề này. Cảm ơn bạn.
Alexandru Dicu

Giải pháp này hoạt động và trông sạch sẽ. Câu hỏi: chúng ta sẽ không mất id dòng mà lớp DBContext được làm mới? tức là sử dụng thế hệ lớp edmx?
NoloMokgosi

Không thể tin rằng điều này là cần thiết và bằng cách nào đó đã không được Microsoft sửa chữa - nhưng điều này hiệu quả với tôi. Cảm ơn cho một giải pháp đơn giản.
Sa hoàng Bomba

Giải pháp này có chức năng giống như MissingDllHack . Nó có vẻ sạch hơn, nhưng giới thiệu mã giải pháp vào lớp ngữ cảnh của bạn. Mã này cũng sẽ được gắn cờ để xóa bởi các công cụ như ReSharper và có thể dễ dàng bị mất theo thời gian. Một giải pháp tốt, nhưng tôi thích tách biệt cách giải quyết khỏi bối cảnh theo cách không tạo ra các cảnh báo mã.
Timothy Schoonover

20

Tôi đã sử dụng đăng ký dựa trên mã cho nhà cung cấp. link1 link2

Chỉ cần tạo lớp cấu hình như

class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>());
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

Điểm mấu chốt là this.SetProviderService (SqlProviderService.ProviderInvariantName, SqlProviderService.Instance);

và sử dụng nó theo cách như vậy

[DbConfigurationType(typeof(DbContextConfiguration))]
public class MyDbContext : DbContext
{
    public MyDbContext()
    {
        ...
    }

    public DbSet<...> ...{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
    }
}

Tôi có hai dự án trong một giải pháp. Đầu tiên là thư viện lớp với khung thực thể lắp ráp một lớp DbContext và các tệp tt. Dự án thứ hai là các biểu mẫu cửa sổ sẽ lấy dữ liệu bằng cách sử dụng dự án ef. @Nash: Bạn có thể giải thích rõ hơn (vào dự án nào) bạn đã đặt lớp của mình DbContextConfigurationkhông? Cảm ơn
lướt web

Như đã đề cập ở trên, có vẻ như các tài liệu tham khảo bổ sung là một cách để khắc phục điều này (xem bình luận từ eric). Tôi đã sử dụng bàn điều khiển nuget và thực hiện lệnh này: Get-Project MyWinformsProject | Install-Package EntityFrameworknó đã sửa nó cho tôi. Tôi vẫn muốn hiểu rõ hơn lý do.
lướt sóng

DbContextConfiguration dường như đã có mặt (so với 2013), việc thêm dòng DbConfiguraton phía trên lớp MyDbContext của tôi không giải quyết được vấn đề cho tôi.
Anders Lindén

Bạn không cần một lớp DbConfiguration . Đặt mã sau đây khi khởi động ứng dụng (trước khi sử dụng EF) : DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares

14

Tôi đã sắp xếp nó với [DeploymentItem] trên lớp khởi tạo lắp ráp của tôi

namespace MyTests
{
    /// <summary>
    /// Summary description for AssemblyTestInit
    /// </summary>
    [TestClass]
    [DeploymentItem("EntityFramework.SqlServer.dll")]
    public class AssemblyTestInit
    {
        public AssemblyTestInit()
        {
        }

        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [AssemblyInitialize()]
        public static void DbContextInitialize(TestContext testContext)
        {
            Database.SetInitializer<TestContext>(new TestContextInitializer());
        }
    }
}

9

Đến bữa tiệc muộn, nhưng những câu trả lời được bình chọn hàng đầu đều có vẻ như là hack đối với tôi.

Tất cả những gì tôi đã làm là xóa phần sau khỏi app.config trong dự án thử nghiệm. Đã làm việc.

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

Giải pháp thực sự!
Ben F

8

Tôi có vấn đề, vì tôi không thêm tài liệu tham khảo vào EntityFramework.sqlServer.dll. Khi tôi phát triển chương trình, nó hoạt động. Nhưng khi tôi xuất bản ứng dụng và cài đặt nó, nó sẽ báo lỗi.

Tôi chỉ cần thêm tài liệu tham khảo và xây dựng và xuất bản một lần nữa.

Người giới thiệu


Tôi đã làm điều này và nó đã làm việc. Về cơ bản dự án sẽ hiển thị một cảnh báo khi các thành phần đến các thư viện không được giới thiệu đúng.
kbvishnu

5

Tôi đã giải quyết điều này bằng cách sao chép thủ công EntityFramework.SqlServer.dlltệp vào bin folderứng dụng chính.


4

Cuối cùng tôi đã giải quyết điều này. Hóa ra, tôi đã có một triển khai IDIsposable sai trong lớp kho lưu trữ của mình. Tôi đã sửa nó. Việc triển khai sai đã gây ra ngoại lệ stackoverflow vì tôi đã không xử lý tài nguyên đúng cách. Điều này khiến VS không chạy được các bài kiểm tra và động cơ thực thi thử nghiệm bị hỏng.

Tôi đã nộp nó với Microsoft tại đây (đây là trước khi tôi có giải pháp chính xác). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execut-crashes-in-vs-2012#details

Dù sao, các bản dựng bây giờ chạy tốt trên teamcity. Mặc dù vậy, tôi vẫn tò mò tại sao công cụ thực thi VS Test không có cách nói duyên dáng cho tôi biết chuyện gì đang xảy ra không phải là Team City.

Tôi đã phát hiện ra nguyên nhân gốc bằng cách gỡ lỗi thủ công bài kiểm tra (điều mà tôi chỉ nhận ra sau nhiều ngày, quá trình khắc phục mất 5 giây).

Hy vọng rằng điều này sẽ giúp ai đó gặp phải những vấn đề như vậy.


4

Tôi thấy vấn đề tương tự và sử dụng phương pháp từ bài đăng này: ( http://entityframework.codeplex.com/workitem/1590 ), giải quyết vấn đề của tôi.

Để khắc phục sự cố, bạn có thể làm cho tổ hợp thử nghiệm của mình tham chiếu trực tiếp đến nhà cung cấp dịch vụ bằng cách thêm một số dòng như thế này vào bất kỳ đâu trong cụm thử nghiệm: var _ = System.Data.Entity.SqlServer.SqlProviderService.Instance;


3

Khi tôi kiểm tra vấn đề, tôi nhận thấy rằng dll sau bị thiếu trong thư mục đầu ra. Giải pháp đơn giản là sao chép Entityframework.dll và Entityframework.sqlserver.dll với app.config vào thư mục đầu ra nếu ứng dụng ở chế độ gỡ lỗi. Đồng thời thay đổi, tham số tùy chọn xây dựng "Sao chép vào thư mục đầu ra" của app.config để sao chép luôn. Điều này sẽ giải quyết vấn đề của bạn.


2
Tôi chỉ thiết lập "Sao chép cục bộ" cho "EntityFramework.SqlServer". Bây giờ nó hoạt động.
Alezis

3

Chỉ cần tham khảo hoặc trình duyệt dll EF - EntityFramework.SqlServer.dll


Đây là những gì tôi đã làm. Đã sao chép Tài liệu tham khảo đến "EntityFramework.SqlServer" từ thư viện của tôi sang dự án "đang chạy". Điều đó đã làm việc!
Håkon K. Olafsen

3

Tôi đã có cùng một lần tôi đã thử nhiều lần nhưng nó không giải quyết được nhưng khi tôi cài đặt gói EntityFramework.SqlServerCompact thì nó đã giải quyết cài đặt gói này từ Trình quản lý gói Nuget.

Install-Package EntityFramework.SqlServerCompact

3

Tôi đã tạo một tệp "khởi động" tĩnh và thêm mã để buộc DLL được sao chép vào thư mục bin trong đó như một cách để tách 'cấu hình' này.


[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }

public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder
        SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}


1
Cảm ơn! Đây là một sự giúp đỡ rất lớn.
Addison Schuhardt

1
Rất vui vì bạn đã tìm thấy câu trả lời của tôi hữu ích @AddisonSchuhardt :)
Hatsrumandcode

2

Tôi không muốn tham chiếu đến EF trong dự án ứng dụng của mình (hoặc sao chép thủ công bất cứ thứ gì) vì vậy tôi đã thêm nó vào các sự kiện sau khi xây dựng dự án của tôi:

cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}

2

Điều này chỉ xảy ra trong các dự án thử nghiệm tải / đơn vị của tôi. Bực bội, tôi đã nhảy lên trong một dự án tôi đã thực hiện được 2 năm. Phải có một số thứ tự chạy thử phá vỡ mọi thứ. Tôi đoán một khi fi đã bị loại bỏ.

Tôi thấy rằng chỉ cần khai báo một biến sử dụng giá trị đúng sẽ khắc phục vấn đề ... Tôi thậm chí không bao giờ gọi phương thức. Chỉ cần xác định nó. Lạ nhưng nó hoạt động.

    /// <summary>
    /// So that the test runner copies dlls not directly referenced by the integration project
    /// </summary>
    private void referenceLibs()
    {
        var useless = SqlProviderServices.Instance;
    }

2

Sau khi thử tất cả các giải pháp được đề xuất khác và không làm cho dự án của tôi hoạt động, cuối cùng tôi đã tìm thấy một nhận xét nhỏ trong trang này :

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

Và nó cũng làm việc cho tôi.


1
Tôi đã hợp nhất 2 chi nhánh - dự án của tôi không có thay đổi liên quan đến EF, nhưng những điều không may mắn của tôi chỉ bắt đầu thất bại mà không có lý do. Xóa thư mục BIN khiến chúng hoạt động trở lại.
Arno Peters

@ Zeek2 lỗi này là một lỗi khó khăn. Có nhiều đề xuất khác nhau để giải quyết vấn đề này trong trang tôi đã trích dẫn. Đây chỉ là một trong nhiều giải pháp có thể. Tiếp tục nghiên cứu nó cho đến khi bạn tìm ra giải pháp sẽ áp dụng cho vấn đề cụ thể của bạn và chúc may mắn.
Ulysses Alves

1

Thêm Entityframework.dll và Entityframework.sqlserver.dll vào dự án tham chiếu đã giải quyết được vấn đề.


1

Tôi đã kiểm tra cửa sổ Debug Output trong dự án Test Test. EntityFramework.SqlServer.dll không được tải. Sau khi thêm nó vào các bài kiểm tra thư mục bin đã được chạy thành công.


1

Tôi cũng gặp 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


1

Tôi đã có cùng một vấn đề với DBContextđối tượng Instantiating từ một dự án thử nghiệm đơn vị. Tôi đã kiểm tra các gói dự án thử nghiệm đơn vị của tôi và tôi đã tìm ra rằngEntityFramework gói đó chưa được cài đặt, tôi đã cài đặt nó từ Nuget và vấn đề đã được giải quyết (tôi nghĩ đó là lỗi EF).

mã hóa hạnh phúc


0

Tôi chỉ có thông báo lỗi tương tự.

Tôi có một dự án riêng để truy cập dữ liệu của tôi. Chạy Dự án Web (tham chiếu dự án dữ liệu) hoạt động tốt ở địa phương. Nhưng khi tôi triển khai dự án web để thực hiện việc lắp ráp: EntityFramework.SqlServer không được sao chép. Tôi vừa thêm tài liệu tham khảo cho dự án web và triển khai lại, bây giờ nó hoạt động.

hy vọng điều này sẽ giúp những người khác


0

Tôi đang làm việc trên hướng dẫn ngoại tuyến của Đại học Contoso và gặp phải vấn đề tương tự khi cố gắng tạo bộ điều khiển đầu tiên của mình bằng cách sử dụng EF. Tôi đã phải sử dụng Bảng điều khiển quản lý gói để tải EF từ bộ đệm nuget và tạo chuỗi kết nối đến phiên bản SQL Server cục bộ của tôi, quan điểm của tôi ở đây là cài đặt webConfig của tôi cho EF có thể không được đặt như tất cả các bạn ngoài đó nhưng tôi đã có thể để giải quyết vấn đề của tôi bằng cách xóa hoàn toàn phần "nhà cung cấp" trong "entityFramework"

Robert


0

Có một sửa chữa dễ dàng. mở các tài liệu tham khảo trong dự án của bạn, nhấp chuột phải vào "System.Data" -> thuộc tính. Thay đổi "Sao chép cục bộ" thành "Đúng".

Vấn đề cần được khắc phục.


0

Trong trường hợp của tôi, tôi đã giải quyết vấn đề bằng cách cài đặt SQL Server 2012 Developer Edition khi tôi đã cài đặt SQL Server Express 2012 (x64) trước đó. Dường như điều đó cung cấp cho tôi sự phụ thuộc còn thiếu.


0

loại bỏ khung thực thể khỏi dự án thông qua nuget sau đó thêm nó vào lại.


0

Trong trường hợp của tôi dllđã không được sao chép mặc dù tôi đã thêm một tài liệu tham khảo đến nó. Điều này là do EntityFramework.SqlServer.dllkhông được sao chép vào dự án của bạn. Thêm dll đó và hy vọng nó sẽ hoạt động. Bạn có thể tìm thấy điều đó từ dự án nơi bạn đã thêm datamodel.


0

Bổ sung cho tất cả các đề xuất hữu ích ở đây, nếu bạn đang sử dụng EF 6.1.3, hãy đảm bảo phiên bản .net của dự án của bạn là 4.5 trở lên.

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.