[entity-framework] 고정 이름이 ‘System.Data.SqlClient’인 ADO.NET 제공자에 대한 Entity Framework 제공자를 찾을 수 없습니다.

nuget으로 EF6을 다운로드하고 프로젝트를 실행하려고하면 다음 오류가 반환됩니다.

이름이 ‘System.Data.SqlClient’인 ADO.NET 제공자에 대한 Entity Framework 제공자를 찾을 수 없습니다. 제공자가 애플리케이션 구성 파일의 ‘entityFramework’섹션에 등록되어 있는지 확인하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=260882 를 참조하십시오.

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



답변

방금 동일한 문제가 발생했으며 NuGet Package Manager에서 설치했지만 프로젝트에 올바르게 설치되지 않았지만 EntityFramework처럼 보입니다.

패키지 관리자 콘솔 에서 다음 명령을 실행하여 문제를 해결했습니다 .

PM> Install-Package EntityFramework


답변

클래스 라이브러리 프로젝트에 EF를 추가했습니다. 또한이를 참조하는 프로젝트 (콘솔 앱, 웹 사이트 등)에 추가해야합니다.


답변

콘솔 응용 프로그램에 Entity Framework를 설치할 필요가 없으며 어셈블리 EntityFramework.SqlServer.dll에 대한 참조 만 추가하면됩니다. Entity Framework를 사용하는 클래스 라이브러리 프로젝트에서이 어셈블리를 LIB 폴더로 복사하고 이에 대한 참조를 추가 할 수 있습니다.

요약하자면:

  • 클래스 라이브러리 응용 프로그램 :
    • 엔터티 프레임 워크 설치
    • 데이터 레이어 코드 작성
    • app.config 파일에는 연결 문자열을 제외하고 Entity Framework와 관련된 모든 구성이 있습니다.
  • 콘솔, 웹 또는 데스크탑 애플리케이션을 작성하십시오.
    • 첫 번째 프로젝트에 대한 참조를 추가하십시오.
    • EntityFramework.SqlServer.dll에 대한 참조를 추가하십시오.
    • app.config / web.config에는 연결 문자열이 있습니다 (구성 항목의 이름은 DbContext 클래스의 이름과 같아야 함을 기억하십시오).

도움이 되길 바랍니다.


답변

“EntityFramework.SqlServer.dll”포함 하지 않은 경우 에도이 메시지가 표시 될 수 있습니다 .

EF6에 새로 추가 된 파일 인 것 같습니다. 처음에는 병합 모듈에 포함시키지 않고 여기에 나열된 문제가 발생했습니다.


답변

프로젝트를 호스팅하기 위해 EntityFramework.SqlServer를 추가하는 대신 다음과 같이 Model / entity 프로젝트에서 정적 참조를 보장 할 수 있습니다

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

그러면 빌드 프로세스에 호스트 프로젝트와의 어셈블리가 포함됩니다.

내 블로그 http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/ 에 대한 추가 정보


답변

언제 통해 엔티티 프레임 워크 (6)를 설치합니다 Nuget. EntityFramework.SqlServer는 때때로 다른 실행 파일이 누락되었습니다. Nuget해당 프로젝트에 패키지를 추가하기 만하면 됩니다.

때때로 위의 테스트 프로젝트에서 작동하지 않습니다

테스트 프로젝트에서이 문제를 해결하려면이 메소드를 테스트 프로젝트 안에 넣으십시오.

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

이 메소드는 호출 된 적이 없지만, 필자가 관찰 한 것처럼 컴파일러는 모든 “불필요한”어셈블리를 제거 EntityFramework.SqlServer하고 테스트에 실패한 것을 사용하지 않습니다.


답변

이 기능 추가

private void FixEfProviderServicesProblem()

라이브러리 클래스의 데이터베이스 컨텍스트 클래스에 누락 된 DLL EntityFramework.SqlServer.dll이 올바른 위치로 복사됩니다.

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

.