고정 이름이 'System.Data.SqlClient'인 ADO.NET 제공자에 대한 Entity Framework 제공자를 찾을 수 없습니다.


542

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

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

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


providers및 항목 없이 EF5를 사용 provider하므로 제거하는 것이 좋습니다 .
ta.speot.은 (는)

1
여기에 연결 문자열을 복사하십시오
pylover

연결 문자열은 그림 (App.confing)에 있습니다. 매우 간단합니다. 생성자를 호출합니다 public BaseStorage(): base ("RaptorDB") {}.BaseStorage ()는 EF5의 DbContext에서 상속합니다 .EF6에서는 아직 완벽하게 작동하지 않았습니다.
페르난도 벨로 조

10
두 번째 프로젝트 (콘솔) 인 EF6을 설치하면 문제를 해결할 수 있습니다.
페르난도 벨로 조

3
나에게 이것은 Visual Studio에서 EntityFramework.SqlServer 어셈블리가 기본 프로젝트에서 실제로 사용되었음을 인식하지 못했기 때문에 발생하는 것으로 보입니다. @ Carra 's answer 과 같은 작업을 수행 하면 기본 프로젝트를 참조하는 각 프로젝트에 EF를 추가 할 필요가 없습니다.
tehDorf

답변:


608

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

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

PM> Install-Package EntityFramework

34
PMC는 'EntityFramework 6.0.1'이 이미 설치되어 있지만 내 콘솔 앱 (EF를 사용하지 않는)에 추가했지만 나에게도 속임수를 썼습니다. II 콘솔 응용 프로그램 참조에서 EF를 제거하고 오류를 반환합니다.이 기능을 사용할 수 없습니다. 콘솔 응용 프로그램에서 EF를 사용하는 리포지토리 프로젝트를 사용하고 있습니다. 도움을 주셔서 감사합니다!
Prokurors

33
솔루션에 여러 프로젝트가있는 경우 명령 행에 -ProjectName <ProjectName>을 추가하는 것을 잊지 마십시오 ... !!!
Eugenio Miró

1
-Pretell nuget 옵션을 사용하여 시험판 패키지를 설치하십시오. 나는 그것을 사용하지 않는 것이 좋습니다. 비슷한 오류가 있지만 해결책은 호스트 프로젝트에 EntityFramework를 설치하는 것입니다. 클래스 라이브러리에는 설치했지만 기본 프로젝트 (웹 / 콘솔 / 또는 기타)에는 설치하지 않았습니다.
Davide Icardi

10
여기에도 같은 문제가 있습니다. EF에 대한 참조가없는 프로젝트가 있었지만 EF dll은 디버그 폴더에있었습니다. EntityFramework.SqlServer.dll디버그 폴더에 추가 된이 프로젝트에 대해이 명령을 실행하면 문제가 해결됩니다.
qujck

4
내 상황 에서이 오류는 프로젝트를 테스트 서버에 배포 할 때까지 나타나지 않았습니다. 실제로 EntityFramework.SqlServer.dll이 누락되어 패키지 관리자를 통해 EF를 설치했습니다. 방금 프로젝트에 두 개의 관련 참조를 추가 한 다음 entityFramework 설정을 web.config에 추가했습니다. 로컬 IIS가 어셈블리를 로컬로 소싱 할 수 있었지만 웹 서버의 전체 IIS가 권한으로 인해 실패한 것 같습니다.
Atters

383

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


246
이것은 절대적으로 우스운 대답입니다. 왜 지구상에서 그렇게해야합니까? 그리고 더 우스운 것이 무엇인지 아십니까? 효과가있다.
Robert

19
아래의 답변을 참조하십시오. 콘솔 응용 프로그램에 EF를 설치할 필요가 없습니다.
Francisco Goldenstein

7
당신은 정답입니다. EF가있는 라이브러리를 사용하는 프런트 엔드 프로젝트에 참조 EntityFramework.SqlServer.dll 만 추가하고 문제를 해결하십시오. 따라서이 EF를 사용하지 마십시오 (DLL 만 해당)
harveyt

31
콘솔 / 웹 앱에서 EF에 대한 참조 추가 하지 않아도됩니다 . EntityFramework.SqlServer.dllbin 디렉토리에 복사되고 있는지 확인 하면됩니다. 강력한 참조를 추가하면 아키텍처가 손상 될 수 있습니다 (여러 계층을 구축 한 경우 최상위 실행 어셈블리는 EF에 대해 알지 못함). 대신 SQL Server 공급자가 복사되었는지 확인할 수 있습니다. 예를 들어 stackoverflow.com/a/19130718/870604
ken2k

3
EntityFramework.SqlServer.dll이 종속성으로 감지되지 않는 이유는 Entity Framework가 동적으로로드하기 때문입니다. 유일한 참조가 구성 파일에있을 때 프로젝트가 SQL 공급자를 복사하는 방법을 어떻게 알고 있습니까?
Joel McBeth 14

209

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

요약하자면:

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

도움이 되길 바랍니다.


18
정답. EF를 설치할 필요가 없습니다. EntityFramework.SqlServer.dll.
Tom Stickel

15
동의해야합니다. 이것은 완전히 정답입니다. 1 / 2mb 인 dll을 참조하거나> 5.5mb 인 EF 너겟 프로젝트를 가져 오십시오. 멀티 티어도 아키텍쳐 가치를 약간 줄입니다. MS의 불쌍한 쇼 : 저는 4 개의 계층이 있으며 최상위 계층은 EF에 대해 전혀 알 필요가 없습니다.
72GM

18
어쨌든 여전히 우스운. 예 : 프런트 엔드에 SqlServer에 대한 참조가 필요한 이유는 무엇입니까? 내 경우에는 프론트 엔드가 덜 신경 쓰지 못했습니다. 그러나 작동합니다. +1
Mike de Klerk

2
도움이되었습니다. 고마워
peter_the_oak

1
이것이 EntityFramework 버전을 업데이트하기 어렵지 않습니까? 당신은 가서 DLL에 대한 참조를 업데이트하는 것을 기억해야 할 것
분쇄

114

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

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


7
이전에 EF에 대한 참조가있는 프로젝트 (b)에 대한 프로젝트 (a)가 있었을 때이 문제가 발생했습니다. 프로젝트 (a) bin 폴더를 정리 및 삭제 한 후 다시 빌드 한 후 EF 참조가 나타 났지만 EF.SqlServer.dll은 아닙니다. 이에 수동으로 나를 위해 일한 복사
단 리처드슨에게

2
@dan richardson 'bin 폴더 삭제'를 언급 해 주셔서 감사합니다.
Rajshekar Reddy

EF6 업그레이드 후 LINQPad 스크립트를 실행하려고 할 때 오류가 발생했습니다. LINQPad에서 EntityFramework.SqlServer.dll을 참조해도 VS2013에서 솔루션을 다시 빌드 할 때까지 문제가 해결되지 않았습니다. 그런 다음 LINQPad에서 새 참조가 올바르게 해결되고 스크립트가 실행되었습니다!
Chris

제 경우에는 개발 환경에서 괜찮 았지만 게시 할 때 참조 된 문제가 나타납니다. dev의 라이브러리 목록을 서버의 bin 폴더와 비교 한 후 EntityFramework.SqlServer.dll이 없다는 것을 알았으므로 업로드하고 앱을 새로 고치고 수정했습니다.
Henry Rodriguez

이것은 나에게 문제였습니다, 감사합니다! 모든 필요한 프로젝트에 DLL을 포함시키는 것을 잊어 버리는 문제를 피하려면 @Anders의 깨끗한 솔루션을 참조하십시오.
SharpC

54

프로젝트를 호스팅하기 위해 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/ 에 대한 추가 정보


5
필자는 지속성에 무관심 해야하는 프로젝트에 지속성 관련 DLL에 대한 참조를 포함 할 필요가없는 훌륭한 솔루션이라고 생각합니다.
JTech

3
동의하며 지속성뿐만 아니라 암시 적 종속성이있는 모든 라이브러리에 적용됩니다.
Anders

3
어셈블리의 형식에 명시 적으로 의존하는 경우 빌드 프로세스에 의해 형식이 복사됩니다. 그러나 여기에는 명시적인 종속성이 없으며 빌드 프로세스에서 어셈블리를 빌드 폴더로 복사하지 못합니다. 내 코드는 해당 어셈블리의 모든 유형에 대한 명시 적 참조가 있는지 확인합니다.
Anders

2
그것이 없으면 코드에서 어셈블리에 대한 명시 적 의존성이 없으며 출력으로 복사되지 않습니다.
Anders

2
훌륭합니다.
Kris

48

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

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

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

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

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


2
글쎄, 이것은 예쁘지 않지만 테스트 프로젝트에서 겪었던 문제를 해결했습니다. 다른 솔루션은 작동하지 않았습니다.
존경하는 차우

필자의 경우 "솔루션 용 Nuget 패킷 관리"의 테스트 프로젝트에도 Entity Framework를 추가하는 것으로 충분했습니다.
Juha Palomäki

실제로 컴파일 후 System.Data.Entity.SqlServer가 "results lib set"에 포함되는지 확인하려면 테스트뿐만 아니라 모든 프로젝트에 넣어야합니다 (참고 : Unity 또는 기타 IoC 도구는이 규칙을 변경할 수 있으므로 테스트 프로젝트 에서이 코드를 호출해야합니다).
Roman Pokrovskij

이것은 프로젝트의 어느 곳에서나 엔티티 프레임 워크 참조를 스프레이 할 필요가 없기 때문에 실제로 가장 좋은 솔루션입니다.
Daniel Lobo

이것은 올바른 방향으로 나를 가리 켰습니다. 이 EntityFramework.SqlServer클래스 라이브러리에 추가되지만 사용하지 않으면 응용 프로그램의 출력 폴더 안에 배치되지 않습니다. 나는 ExecutionStrategy여전히 필요한을 추가하여 문제를 해결 했으므로 클래스 SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());내부 와 같은 줄을 추가 DbConfiguration하면 문제가 해결되었습니다.
Jan_V

24

이 기능 추가

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

.


죄송합니다. ... 작동하지 않을 것이라고 생각 했으므로 ... 그리고 그렇습니다! ... 답변을 수정하지 않고 너무 오랫동안 답변을하지 않으면 투표를 변경할 수 없습니다. 잠겨 ...
Seabizkit

이것은 나에게도 효과가있었습니다. EF 6을 사용하는 라이브러리 프로젝트와 라이브러리를 사용하는 콘솔 응용 프로그램이 있습니다. OP와 동일한 예외가 발생했습니다. 우리는 응용 프로그램 구성 파일에 EntityFramework 특정 구성을 배치하고 싶지 않으므로이 방법이 효과적이었습니다. 감사합니다
Rob

1
어디 FixEfProviderServicesProblem에서 전화를 했는지, 운이없는 곳에서 생성자를 사용해 보았습니다.
Francis Ducharme

1
나는 결코 그것을 부르지 않는다. 그 사실은 .net이 필요하다고 생각하게 만들고 EntityFramwork를 종속성으로 포함합니다.
Johannes

아마 stackoverflow.com/a/19130718/1467396 ? 그러나 어쨌든 그것을 사용하는 방법의 명확성을 위해 +1.
David

20

이 중 어느 것도 나를 위해 일하지 않았습니다. 또 다른 stackoverflow 질문 에서 해결책을 찾았습니다 . 쉽게 참조 할 수 있도록 여기에 추가하겠습니다.

참조가 필요하므로 응용 프로그램 경로에 복사됩니다. 나중에 런타임에서 참조되기 때문입니다. 따라서 파일을 복사 할 필요가 없습니다.

private volatile Type _dependency;

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

2
이! 이 어셈블리를 참조 할 수있는 다른 프로젝트에 대한 참조를 추가 할 필요가 없습니다.
tehDorf

8

SQL Server Compact 4.0에서 Entity Framework 6을 사용하는 동안 동일한 오류가 발생했습니다. EF6 용 Entity Framework Providers 용 MSDN에 대한 기사 가 도움이되었습니다. 패키지 관리자 콘솔에서 각 제공자 명령을 너겟 패키지로 실행하면 NuGet 패키지가 구성 파일에 등록을 자동으로 추가하므로 문제점을 해결할 수 있습니다. 나는 PM> Install-Package EntityFramework.SqlServerCompact문제를 해결하기 위해 달려 갔다 .


2
지금까지 아무도 투표하지 않았다는 것이 정말 놀랍습니다! 오류 메시지는 다음과 같이 명확하게 설명되어 있습니다. 오류의 원인은 EF 업그레이드 후 응용 프로그램의 web.config 파일에 SQL Compact에 대한 공급자 정의가 남아 있지 않기 때문입니다! 언급 한 패키지를 추가하면 web.config 파일이 수정되고 공급자가 정의됩니다.
Csaba Toth

1
단순히 생명의 은인. 문제에 대한 해결책을 명확하게 제공하므로 답변으로 표시되어야합니다.
ZafarYousafi

7

각각 다른 프로젝트의 웹 서비스 세트와 해당 서비스 중 일부에 대한 통합 테스트를 포함하는 별도의 프로젝트로 작업 할 때이 문제에 부딪치게되었습니다.

통합 테스트 프로젝트에서 EF에 대한 참조를 포함 할 필요없이 EF5와 함께 한동안이 설정을 사용했습니다.

이제 EF6으로 업그레이드 한 후 통합 테스트 프로젝트에도 EF6에 대한 참조를 포함시켜야하지만 (위에서 user3004275가 지적한 것처럼) 사용하지 않아도됩니다 .

같은 문제가 발생했다는 표시 :

  • EF6에 대한 참조가있는 프로젝트에서 시작된 경우 EF에 직접 호출 (DB에 연결, 데이터 가져 오기 등)이 제대로 작동합니다.
  • 게시 된 서비스 인터페이스를 통해 서비스 호출 정상적으로 작동합니다. 즉, 서비스에 "내부적으로"누락 된 참조가 없습니다.
  • 서비스 외부 프로젝트에서 서비스 프로젝트의 공용 메소드직접 호출 하면 해당 프로젝트 자체에서 EF가 사용되지 않더라도이 오류가 발생합니다. 호출 된 프로젝트에서만 내부적으로

세 번째 요점은 잠시 동안 나를 버린 것인데 왜 이것이 이것이 필요한지 잘 모르겠습니다. 통합 테스트 프로젝트에서 EF6에 참조를 추가하면 어쨌든 해결되었습니다 ...


7

테스트 프로젝트에서 오류가 발생하면 가장 좋은 해결책은 다음과 같이 테스트 클래스를 장식하는 것입니다.

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

그것은 실제로는 많지만 더 많은 작업을 생성하고 잊기 쉽습니다. "강제 참조"기법을 사용하면 실제로 EF를 사용해야하는 프로젝트에서만 수행해야합니다.
Charles Roberto Canato

7

Entity Framework가 사용되는 프로젝트를 참조하는 시작 프로젝트는 bin 폴더에 다음 두 개의 어셈블리가 필요합니다.

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

시작 프로젝트에서 .config 파일에 <section>를 추가하면 <configSections>해당 bin 디렉토리에서 첫 번째 어셈블리를 사용할 수 있습니다. 이것을 Entity Framework 프로젝트의 .config 파일에서 복사 할 수 있습니다.

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

bin 폴더에서 두 번째 .dll을 사용할 수 있도록하려면 실용적이지는 않지만 Entity Framework 프로젝트의 bin 폴더에서 수동으로 복사 할 수 있습니다. 더 나은 대안은 Entity Framework 프로젝트의 빌드 후 이벤트에 다음 행을 추가하여 프로세스를 자동화하는 것입니다.

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

2
고맙게도, 데이터 계층에 Entity 프레임 워크가 있으므로 격리되어 있지만 Microsoft가 데이터 계층을 실제로 격리하고 데이터베이스 기술로 ux를 오염시킬 수는 없습니다. 나는 그렇게하지 않기를 바랐다.
Matt

4

나는 오늘이 문제에 부딪쳤다. 테스트를 위해 EF63 NuGet 패키지 및 콘솔 응용 프로그램이있는 데이터 저장소 클래스 라이브러리가 있으며 클래스 라이브러리 프로젝트 만 참조합니다. 클래스 라이브러리의 Bin \ Debug 폴더에서 콘솔 응용 프로그램의 Bin \ Debug 폴더로 EntityFramework.SqlServer.dll을 복사하여 문제를 해결하는 매우 간단한 빌드 후 명령을 만들었습니다. entityFramework 섹션을 콘솔 애플리케이션의 .config 파일에 추가하는 것을 잊지 마십시오.


4

app.config에 아래를 추가하십시오.

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

당신은 또한에 등록해야 <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"의 기능입니다. 기본적으로 EntityFramework는 SqlClient의 고정 이름에 대해 EntityFramework.SqlServer.dll을로드하려고하기 때문에 실제로는 필요하지 않습니다. 이 방법을 사용하여 공급자를 대체 할 수 있습니다.
user1295211


3

EntityFramework.SqlServer.dll 어셈블리에 대한 정적 참조를 강제 실행해야 하지만 더미 코드를 넣는 대신보다 아름다운 방법으로이를 수행 할 수 있습니다.

  1. 이미 DbConfiguration 클래스 가있는 경우 :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. DbConfiguration 클래스 가없는 경우 앱 시작시 (EF를 사용하기 전에) 다음 코드를 넣어야합니다.

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


2

YourModel.edmx 파일을 펼치고 YourModel.Context.tt에서 YourModel.Context.cs 클래스를여십시오.

using 섹션에 다음 줄을 추가하고 오류가 수정되었습니다.

SqlProviderServices 사용 = System.Data.Entity.SqlServer.SqlProviderServices;

파일이 자동 생성 될 때마다 파일에이 줄을 추가해야 할 수도 있습니다.


2

비슷한 문제가 있었는데, 다음과 같은 방법으로 문제를 해결했습니다.

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

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


2

System.Data.SqlClient가 시스템에 설치되어 있고 참조가 있는지 먼저 확인한 사람은 없습니다.

System.Data.SqlClient를 설치하고 app.Config에서 새 공급자를 추가하여 문제를 해결했습니다.

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

1

또한 시작 프로젝트가 dbcontext (또는 관련 app.config)가 포함 된 프로젝트인지 확인하십시오. Mine은 필요한 모든 구성 설정이없는 웹 사이트 프로젝트를 시작하려고했습니다.


1

나는 위의 거의 모든 것을 시도했지만 아무것도 효과가 없었습니다.

나는 기본 프로젝트에 참조 된 DLL을 설정 한 경우에만 EntityFrameworkEntityFramework.SqlServer등록 Copy Local하는 True이 작업을 시작 않았다!


1

모두 두 개의 dll EntityFramework.dll 및 EntityFramework.SqlServer.dll이 DataAccess 계층 라이브러리이며주의하여보기 또는 다른 계층에서 사용하는 것이 논리적이지 않다는주의가 필요합니다. 문제를 해결하지만 논리적이지 않습니다.

논리적 인 방법은 enitiess 속성을 제거하고 Fluent API로 대체하는 것입니다.


1

하나의 콘솔 응용 프로그램과 클래스 라이브러리가 있습니다. 클래스 라이브러리에서 엔티티 데이터 모델을 생성하고 (클래스 라이브러리> 추가> 새 항목> 데이터> ADO.NET 엔티티 데이터 모델 6.0으로 마우스 오른쪽 버튼을 클릭) 콘솔 응용 프로그램에 참조를 넣습니다. 따라서 클래스 라이브러리에 대한 참조가있는 콘솔 응용 프로그램과 EF 모델이있는 클래스 라이브러리 내부가 있습니다. 테이블에서 일부 레코드를 가져 오려고 할 때도 같은 오류가 발생했습니다.

다음 단계에 따라이 문제를 해결했습니다.

  1. 솔루션을 마우스 오른쪽 버튼으로 클릭하고 '솔루션 용 NuGet 패키지 관리'옵션을 선택하면 NuGet 패키지 관리자 창이 나타납니다.
  2. '설치된 패키지'아래의 '관리'옵션으로 이동하십시오. 팁 : Entity Framework가 클래스 라이브러리에 추가되므로 '설치된 패키지'아래에 EntityFramework가 있고 '관리'옵션이 표시됩니다.
  3. '관리'옵션을 클릭하고 EF 모델을 보유한 클래스 라이브러리에 대한 참조가있는 프로젝트에 패키지 설치를 확인하십시오 (제 경우에는 EF 모델이있는 클래스 라이브러리에 대한 참조가있는 콘솔 앱에 패키지를 설치하도록 확인란을 설정했습니다)

그게 내가해야 할 일이며 모든 것이 완벽하게 작동했습니다.

도움이 되었기를 바랍니다.


1

같은 오류가 있습니다. dbContext를 사용하여 모델에 쿼리하거나 다음과 같은 목록을 얻을 때마다 발생하는 것이 이상합니다.

var results = _dbContext.MyModel.ToList();

Entity Framework를 다시 설치하려고 시도했지만 제대로 참조했지만 아무 소용이 없습니다.

다행히 Nuget에서 ALL솔루션 을 확인한 다음 모든 것을 업데이트하거나 확인하려고했습니다.everything 두 프로젝트가 웹 프로젝트에서 다른 EF 버전을 가지고 있음을 알았 기 때문에 동일한 버전 했습니다. 그리고 작동합니다. 오류가 사라졌습니다.

모든 솔루션에서 Nuget을 관리하는 방법에 대한 스크린 샷은 다음과 같습니다.

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


1

EntityFramework.SqlServer.dll에 대한 참조가 없습니다. SQL Server를 사용하는 EntityFramework 프로젝트의 경우 참조해야하는 두 파일은 EntityFramework.SqlServer.dll 및 EntityFramework.dll입니다.


0

CE db에서 Azure의 Sql Server로 마이그레이션 할 때 관련 문제가있었습니다. 이 문제를 해결하기 위해 4 시간을 낭비했습니다. 바라건대 이것은 누군가에게 비슷한 운명을 구할 수 있기를 바랍니다. 나를 위해, packages.config 파일에서 SqlCE에 대한 참조가있었습니다. 그것을 제거하면 전체 문제가 해결되고 마이그레이션을 사용할 수있었습니다. 불필요하게 복잡한 설정 및 구성 문제가있는 다른 기술에 대해서는 Microsoft가 필요합니다.


0

동일한 문제가 발생했습니다 .DBContext가 포함 된 프로젝트에서 App Config 파일을 테스트 프로젝트에 복사했습니다.


0

나는 동일한 예외가 발생했다. 나는 포함했다

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

그리고 모든 것이 다시 작동하게되었습니다 ..


0

메시지에 우리가 공급자 System.Data.SqlClient를 추가해야한다는 것을 보여 주므로 dll이 두 개인 EntityFramework의 nuget 패키지를 설치해야하지만 콘솔 응용 프로그램 만 개발하는 경우 EntityFramework.SqlServer.dll의 참조를 추가하면됩니다.

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