엔티티 프레임 워크 제공자 유형을로드 할 수 없습니까?


420

현재 내 컴퓨터에 설치된 TeamCity에서 테스트를 실행하려고합니다.

System.InvalidOperationException:

' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServerVersion=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'대한 Entity Framework 제공자 유형 'System.Data.SqlClient 'ADO.NET 제공자에 로드 할 수 없습니다. 실행중인 응용 프로그램에서 공급자 어셈블리를 사용할 수 있는지 확인하십시오.

자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=260882 를 참조하십시오.

나는 언급이 없다 System.Data.EntityEF6으로 업그레이드하기 위해 codeplex에서 제안한대로 프로젝트에 대한 .

따라서 왜이 예외가 발생하는지 잘 모르겠습니다. VS에서 테스트를 실행할 때 그러한 예외가 발생하지 않습니다.

CopyLocal을 false로 설정 한 다음 다시 true로 설정하려고 시도했지만 작동하지 않는 것 같습니다.

최신 정보

내 app.config에는 다음이 있습니다. 이것이 내가 이해하지 못하는 행동을 유발합니까?

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

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이 EntityFramework.dll과 함께 배포됩니까? EF6에서 SqlServer 및 SqlServerCE 공급자는 이전 버전과 EF 엔진과 동일한 어셈블리에 없습니다. System.Data.Entity.dll에 대한 참조를 추가해서는 안됩니다. EF5와 비교하여 EF6의 공급자 모델이 변경되었으며 EF5 공급자는 작동하지 않습니다. 또한 몇 가지 까다로운 문제가 발생할 수 있습니다 (EF6에서 엔티티 유형으로 처리 된 EF5 지형 공간 유형)
Pawel

예 System.Data.Entity에 대한 참조가없고 EntityFramework.dll 및 EntityFramework.SqlServer.dll에 대한 참조가 두 번 확인되었습니다. 다시 projetc 컴파일 및 테스트는 VS에서 실행됩니다. TeamCity에서 테스트를 실행할 때만 오류가 발생합니다.
ashutosh raina

이것은 올바른 설정입니다. TeamCity를 사용하지 않았지만 TeamCity로 테스트를 실행하기 위해 앱을 배포 할 때 EntityFramework.SqlServer.dll이 누락되어 예외가 발생합니다.
Pawel

1
이 게시물의 답변을 참조하십시오 : stackoverflow.com/questions/21175713/… 나는 private volatile Type _dependency...대답을 추가했고 효과가있었습니다! EF가 TeamCity에서 작동하게하려면 이와 같은 별도의 클래스를 추가해야한다고 생각합니다.
a11smiles

2
내가 nuget 패키지에서 EntityFramework을 제거하고 다시 설치하고 고정있어
abhyudayasrinet

답변:


426

같은 문제이지만 Nuget을 통해 EF 6을 설치했습니다. 다른 실행 파일에 대한 EntityFramework.SqlServer가 누락되었습니다. 그 프로젝트에 너겟 패키지를 추가했습니다.


108
나는 이것도 보았다. EF를 사용하는 라이브러리를 만들면 VS는 EF.dll과 EF.SqlServer.dll을 해당 빌드 폴더에 넣습니다. 그러나 다른 프로그램에서 라이브러리를 사용하는 경우 EF.dll 만이 빌드 폴더에 저장됩니다. EF.SqlServer.dll이 누락입니다. 빌드 폴더에 수동으로 추가하면 프로그램이 작동합니다. 그 자체로는 좋은 해결책은 아니지만 문제가 EF.SQLServer.dll 누락이 오류의 원인이라는 것을 보여줍니다.
Eric

44
var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices);를 추가했습니다. 그런 다음 내 앱이 작동했습니다
Brian

33
나는 코드를 입력 할 때 항상 아무것도하지 않으며 갑자기 프로젝트가 실행되는 것을 항상 걱정합니다. O_o
요르단

10
또한 컴파일러 최적화로 인해 릴리스 x.ToString()에서 typeofs를 수행 하거나 수행 할 수도 있습니다 .
Jordan

15
EF 6.1은 이제 ASPX DLL / Project에 EF를 설치해야하지만 EF 5.0은 데이터 계층 DLL / Project에만 필요했습니다.
PeterX

274

테스트 프로젝트에서 같은 문제가 발생했습니다. NuGet을 통해 최신 EF6 비트를 설치했으며 EF 관련 항목을 호출 할 때마다 다음과 같은 문제가 발생했습니다.

'System.Data.SqlClient'ADO.NET 제공자에 대한 Entity Framework 제공자 유형 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'를로드 할 수 없습니다. 실행중인 응용 프로그램에서 공급자 어셈블리를 사용할 수 있는지 확인하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=260882 를 참조하십시오.

해결 방법 :이 방법을 테스트 프로젝트에 배치했습니다.

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

이 메서드는 호출 된 적이 없지만 컴파일러는 EntityFramework.SqlServer 항목을 사용하지 않고 모든 "필요하지 않은"어셈블리를 제거한다고 생각합니다.

어쨌든 : 내 컴퓨터에서 작동;)

참고 : 프로젝트를 테스트하기 위해 메소드를 추가하는 대신 Model / entity 프로젝트에서 SqlProviderServices에 대한 정적 참조를 보장 할 수 있습니다 .


24
나는 똑같이했다. 이 어셈블리를 db에 대한 연결을 여는 데 의존하게 만든 사람에게 이야기하고 싶습니다. 대체 유니버스에서 연결 문자열이있는 구성 파일이있는 모든 프런트 엔드 프로젝트는이 dll이 연결을 열도록하기 위해 EntityFramework를 참조해야합니다. 이것이 어떤 방식으로 이해가되지 않습니다.
juhan_h

3
그것은 해킹이지만 프로젝트를 위해 배포 패키지를 만들지 않은 시나리오에서 찾은 가장 좋고 쉬운 솔루션입니다.
Kon

3
여러분 모두에게 "var x = typeof (SqlProviderServices);"와 같은 다른 제안을 사용하십시오. Robert가 제공 한이 솔루션 만이 개발 및 빌드 머신에서 작동합니다 !!!
Alexander Schmidt

3
감사합니다 Robert, EF 팀은 말도 안되지만 어쨌든 나를 위해 일하고 있습니다.
Hitesh

7
명확하게 : 위의 코드를 DbContext클래스에 추가하면 EF 6.1의 문제가 해결됩니다. 이 방법으로 프론트 엔드 (WebApi 등) 프로젝트에 Entity Framework Nuget 패키지를 포함 할 필요가 없으며 데이터 계층에서 EF와 관련된 모든 것을 남길 수 있습니다.
Nick

106

Nuget은 EntityFramework.SqlServer.dll을 참조하도록 EF6 프로젝트를 구성합니다. 빌드하는 동안 EF6 프로젝트의 출력 폴더에 배치되지만 EF6 프로젝트를 참조하는 프로젝트의 출력 폴더에는 배치되지 않습니다. Visual Studio는 어셈블리의 아무것도 실제로 dll을 직접 사용하고 있지 않으므로 감지하지 않을 정도로 "스마트"하기 때문이라고 생각합니다. EntityFramework.SqlServer.dll을 사용하는 EF6 프로젝트에 코드를 추가하여 EF6 프로젝트 (단위 테스트, UI 등)를 참조하는 프로젝트의 출력 폴더에 EntityFramework.SqlServer.dll을 배포 할 수 있습니다. 다음 재생성시 코드를 잃을 위험이 있으므로 생성 된 클래스에 코드를 넣지 않도록주의하십시오. 다음 클래스를 어셈블리에 추가하여 문제를 해결했습니다.

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
이것은 MSTest와 관련하여 저에게 문제를 해결했습니다. 테스트 클래스에서 클래스 상속에 지장을 줄 필요가 없기 때문에이 방법을 좋아합니다. 테스트 어셈블리 및 MAGIC 어딘가에 클래스를 포함시키기 만하면됩니다. 감사!
kbrimington 2019

정확하게 sqlserver.dll을 참조하는 프로젝트 출력으로 복사하지 않는 이유입니다. 애플리케이션 실행과 컨텍스트 어셈블리 사이에 하나 이상의 계층이있는 경우 발생합니다. 감사합니다.이 문제가 해결되었습니다.
Bharat

2
4 초 동안 그것을보고 싶지 않은 사람들을 위해 : using System.Data.Entity.SqlServer;
TTT

단위 테스트에는 공통 기본 클래스를 사용하며 모든 단위 테스트는이 클래스에서 상속됩니다. 이 클래스를이 클래스에 추가하면 기본 클래스에서 상속 된 단위 테스트 클래스가있는 모든 프로젝트가 정상적으로 작동합니다.
MaxJ

3
작은 점이지만, 왜 필요한지 설명하기 위해이 클래스에 주석을 추가하는 것이 가장 좋습니다.
John Darvill

43

내 솔루션은 너겟 관리자를 통해 프로젝트에서 엔티티 프레임 워크를 제거하고 다시 추가하는 것이 었습니다.


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

이 날 위해 일을하고, 나는 그것이 최적의 솔루션이 될 것 같아요
ccoutinho

작동하는 간단하고 깨끗한 솔루션. 목록에서 훨씬 더 높아야합니다
mode777

29

DBContext 클래스 위에 using stament를 추가 하여이 문제를 해결했습니다.

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

1
이것이이 문제에 대한 가장 깨끗한 해결책입니다. 감사합니다.
Alexandru Dicu

이 솔루션은 작동하고 깨끗해 보입니다. 질문 : DBContext 클래스가 새로 고쳐진 줄 ID를 잃지 않습니까? 즉, edmx 클래스 생성을 사용합니까?
NoloMokgosi

이것이 필요하고 어떻게 든 Microsoft에 의해 수정되지 않았다고 믿을 수는 없지만 이것은 나를 위해 일했습니다. 간단한 해결책에 감사드립니다.
차르 봄바

이 솔루션은 기능적으로 MissingDllHack 과 동일합니다 . 깔끔해 보일지 모르지만 컨텍스트 클래스에 해결 방법 코드가 도입되었습니다. 이 코드는 또한 ReSharper와 같은 도구로 제거하도록 표시되어 있으며 시간이 지남에 따라 쉽게 손실 될 수 있습니다. 좋은 해결책이지만 코드 경고를 생성하지 않는 방식으로 해결 방법을 컨텍스트와 분리하는 것이 좋습니다.
Timothy Schoonover

20

제공자에 대해 코드 기반 등록을 사용했습니다. link1 link2

방금 구성 클래스를 만들었습니다.

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

요점은 this.SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance)입니다.

그런 식으로 사용

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

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

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

하나의 솔루션에 두 개의 프로젝트가 있습니다. 첫 번째는 엔티티 프레임 워크 어셈블리와 DbContext 클래스 및 tt 파일을 가진 클래스 라이브러리입니다. 두 번째 프로젝트는 ef-project를 사용하여 데이터를 가져와야하는 Windows 양식입니다. @Nash : 수업을 어디에서 어떤 프로젝트에 배치했는지 자세히 설명해 주 DbContextConfiguration시겠습니까? 감사합니다
surfmuggle

위에서 언급했듯이 추가 참조는 이것을 해결하는 한 가지 방법 인 것 같습니다 (eric의 의견 참조). 나는 nuget 콘솔을 사용 하고이 명령을 실행 Get-Project MyWinformsProject | Install-Package EntityFramework했다. 여전히 나는 그 이유를 더 잘 이해하고 싶습니다.
surfmuggle

DbContextConfiguration이 이미 존재하는 것 같습니다 (2013 년 대). MyDbContext 클래스 위에 DbConfiguraton 줄을 추가해도 문제가 해결되지 않았습니다.
Anders Lindén

DbConfiguration 클래스 가 필요하지 않습니다 . EF를 사용하기 전에 앱을 시작할 때 다음 코드를 입력하십시오 DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares

14

어셈블리 초기화 클래스에서 [DeploymentItem]으로 정렬했습니다.

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

파티에 늦었지만 최고 투표 답변은 모두 나에게 해킹처럼 보였다.

테스트 프로젝트의 app.config에서 다음을 제거했습니다. 일했다.

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

실제 솔루션!
벤 F

8

EntityFramework.sqlServer.dll에 대한 참조를 추가하지 않기 때문에 문제가 있습니다. 프로그램을 개발하면 작동합니다. 그러나 앱을 게시하고 설치하면 오류가 발생합니다.

난 그냥 참조를 추가하고 다시 빌드하고 게시합니다.

참고 문헌


나는 이것을했고 그 일을했다. 기본적으로 프로젝트는 컴포넌트가 라이브러리에 제대로 참조되지 않은 경우 경고를 표시합니다.
kbvishnu

5

EntityFramework.SqlServer.dll파일을 bin folder기본 응용 프로그램 으로 수동으로 복사 하여이 문제를 해결했습니다 .


4

나는 마침내 이것을 해결했다. 내 저장소 클래스에서 IDIsposable을 잘못 구현했습니다. 나는 그것을 고쳤다. 리소스를 올바르게 폐기하지 않았기 때문에 잘못된 구현으로 인해 스택 오버플로 예외가 발생했습니다. 이로 인해 VS가 테스트를 실행하지 않고 테스트 실행 엔진이 중단되었습니다.

여기에 Microsoft에 제출했습니다 (올바른 해결책을 얻기 전에였습니다). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

어쨌든, 빌드는 이제 팀 시티에서 잘 작동합니다. 그럼에도 불구하고 여전히 VS Test 실행 엔진 중 어느 것도 Team City가 아닌 일이 무엇인지 말해주는 우아한 방법이 없었는지 궁금합니다.

나는 테스트를 수동으로 디버깅하여 근본 원인을 발견했습니다 (수일 만에 깨달았지만 수정에는 5 초가 걸렸습니다).

바라건대 이것은 그러한 문제를 겪는 사람을 도울 것입니다.


4

비슷한 문제가 있으며이 게시물의 방법을 사용합니다 : ( http://entityframework.codeplex.com/workitem/1590 ) 내 문제를 해결합니다.

이 문제를 해결하려면 테스트 어셈블리에 다음과 같은 줄을 추가하여 테스트 어셈블리가 공급자 어셈블리를 직접 참조하도록 할 수 있습니다. var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;


3

문제를 검사 할 때 출력 폴더에 다음 dll이 누락 된 것을 알았습니다. 간단한 해결책은 응용 프로그램이 디버그 모드 인 경우 app.config와 함께 Entityframework.dll 및 Entityframework.sqlserver.dll을 출력 폴더에 복사하는 것입니다. 동시에, 항상 복사하도록 app.config의 빌드 옵션 매개 변수 "Copy to output folder"를 변경하십시오. 문제가 해결됩니다.


2
"EntityFramework.SqlServer"에 대해서만 "로컬 복사"를 true로 설정했습니다. 이제 작동합니다.
Alezis

3

간단히 EF dll-EntityFramework.SqlServer.dll을 참조하거나 브라우저하십시오.


이것이 내가 한 일입니다. 라이브러리에서 "실행 중"프로젝트로 "EntityFramework.SqlServer"에 대한 참조를 복사했습니다. 작동했습니다!
Håkon K. Olafsen 님이

3

나는 여러 번 시도했지만 EntityFramework.SqlServerCompact 패키지를 설치할 때 Nuget 패키지 관리자 에서이 패키지를 설치하는 문제를 해결했습니다.

Install-Package EntityFramework.SqlServerCompact

3

정적 "시작"파일을 만들고이 '구성'을 분리하는 방법으로 DLL을 bin 폴더에 복사하도록하는 코드를 추가했습니다.


[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
감사! 이것은 큰 도움이되었습니다.
애디슨 슈 하르트

1
내 답변이 @AddisonSchuhardt :)에 도움이되었다 니 다행입니다.
hatsrumandcode 14

2

응용 프로그램 프로젝트에서 EF에 대한 참조를 원하지 않거나 수동으로 복사하지 않기 위해 EF 프로젝트의 빌드 후 이벤트에 이것을 추가했습니다.

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

2

이것은 내로드 / 유닛 테스트 프로젝트에서만 발생합니다. 좌절, 나는 2 년 동안 실행 한 프로젝트에서 자랐습니다. 문제를 일으키는 테스트 실행 순서 여야합니다. fi가 사라지면 제거됩니다.

올바른 값을 사용하는 변수를 선언하면 문제가 해결된다는 것을 알았습니다 ... 나는 결코 메서드를 호출하지 않습니다. 그것을 정의하십시오. 홀수이지만 작동합니다.

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

2

다른 모든 제안 된 솔루션을 시도한 후 프로젝트가 작동하지 않으면 이 페이지 에서 마침내 작은 의견을 발견했습니다 .

BIN 폴더를 삭제하면 나를 위해 그것을했습니다

그리고 그것은 나에게도 효과가있었습니다.


1
나는 2 개의 지점을 합병했습니다. 프로젝트에 EF와 관련된 변경 사항이 없었지만 단위 테스트는 아무런 이유없이 실패하기 시작했습니다. BIN 폴더를 삭제하면 다시 작동합니다.
Arno Peters

@ Zeek2이 오류는 까다로운 것입니다. 내가 인용 한 페이지에서이 문제를 해결하기위한 여러 가지 제안이 있습니다. 이것은 가능한 많은 솔루션 중 하나입니다. 특정 문제에 적용 할 솔루션과 행운을 찾을 때까지 계속 연구하십시오.
율리시스 알베스

1

Entityframework.dll 및 Entityframework.sqlserver.dll을 참조 프로젝트에 추가하면 문제가 해결되었습니다.


1

Unit Test 프로젝트에서 Debug Output 창을 확인했습니다. EntityFramework.SqlServer.dll이로드되지 않았습니다. bin 폴더에 추가 한 후 테스트가 성공적으로 실행되었습니다.


1

나도 비슷한 문제가 있었다

내 문제는 다음을 수행하여 해결되었습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


1

DBContext단위 테스트 프로젝트에서 객체 인스턴스화와 동일한 문제가 발생했습니다 . 단위 테스트 프로젝트 패키지를 확인한 후EntityFramework 패키지가 설치되지 않은 Nuget에서 패키지를 설치하고 문제가 해결되었습니다 (EF 버그라고 생각합니다).

행복한 코딩


0

방금 같은 오류 메시지가 나타났습니다.

데이터 액세스를위한 별도의 프로젝트가 있습니다. 웹 프로젝트 (데이터 프로젝트를 참조한)를 로컬에서 실행하면 정상적으로 작동했습니다. 그러나 웹 프로젝트를 배포하여 어셈블리를 완성하면 EntityFramework.SqlServer가 복사되지 않았습니다. 방금 웹 프로젝트에 대한 참조를 추가하고 재배치하여 이제 작동합니다.

이것이 다른 사람들을 돕기를 바랍니다.


0

Contoso University 자습서를 오프라인에서 작업하고 EF를 사용하여 첫 번째 컨트롤러를 만들려고 할 때도 같은 문제가 발생했습니다. 패키지 관리자 콘솔을 사용하여 너겟 캐시에서 EF를로드하고 SQL Server의 로컬 인스턴스에 연결 문자열을 작성해야했습니다. 여기에 요점은 EF에 대한 webConfig 설정이 모두 설정되어 있지 않을 수는 있지만 가능했습니다. entityFramework에서 "제공자"섹션을 완전히 삭제하여 문제를 해결하려면

로버트


0

쉬운 수정이 있습니다. 프로젝트에서 참조를 열고 "System.Data"-> 속성을 ​​마우스 오른쪽 단추로 클릭하십시오. "로컬 복사"를 "참"으로 변경하십시오.

문제를 해결해야합니다.


0

필자의 경우 이전에 SQL Server Express 2012 (x64)를 설치했을 때 SQL Server 2012 Developer Edition을 설치하여 문제를 해결했습니다. 누락 된 종속성을 제공 한 것 같습니다.


0

nuget을 통해 프로젝트에서 엔티티 프레임 워크를 제거한 다음 다시 추가하십시오.


0

내 경우 dll에는 참조를 추가했지만 복사되지 않았습니다. EntityFramework.SqlServer.dll프로젝트에 복사되지 않았기 때문 입니다. 해당 dll을 추가하면 잘 작동합니다. 데이터 모델을 추가 한 프로젝트에서 찾을 수 있습니다.


0

EF 6.1.3을 사용하는 경우 여기에 모든 유용한 제안 외에도 프로젝트의 .net 버전이 4.5 이상인지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.