EF 4.1 예외 "공급자가 ProviderManifestToken 문자열을 반환하지 않았습니다."


88

MSDN에서 찾은 예제를 복제하려고합니다. ASP.NET 및 EF 4.1 (CTP?)을 사용하고 있습니다. NuGet을 사용하여 EntityFramework 패키지를 설치했습니다.

이 오류가 발생합니다. The provider did not return a ProviderManifestToken string... 데이터베이스가 생성되지 않습니다.

내 연결 문자열은 다음과 같습니다.

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

내 코드는 다음과 같습니다.

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

내 컨텍스트는 다음과 같습니다.

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

이것은 VS 2010 SP1이있는 완전히 패치 된 SQL 2008 시스템입니다.


모델에 [Key]를 추가 한 후 그 문제를 지나서 작동하는 것 같습니다. 아직 다른 문제가 있지만 이로 인해 해결되었을 수 있습니다.
bugnuker 2011 년

또한 연결 문자열에 "Intergrated security = true"를 추가했을 수도 있습니다 ...
bugnuker 2011 년

작업 할 때 동일한 예외가 있습니다SqlServerCe.Entity.dll
Nano Taboada 2011

2
이 예외를 불러 일으킬 수있는 항목에 관심이 있습니다. 컨텍스트 이름과 일치해야하는 연결 문자열 이름의 오타를 지나쳐서 20 분을 보냈습니다.
justSteve 2012

답변:


184

이 오류가 발생하고 몇 가지 이전 제안을 시도했습니다. 그런 다음 내부 예외를 확인하고 사용자에 대한 간단한 SQL 로그인 실패를 확인했습니다. 확인해야 할 다른 것입니다.


제 경우에는 SQL Server 비밀번호가 만료되었습니다.
mklein

3
올바른 방향을 알려 주셔서 감사합니다. 내 SQL Express 서비스가 시작되지 않았습니다.
camainc 2011

좋은 ol 내부 예외 ... EF가 새로운 백업 위치를 가리 켰을 때 내 DB 이름이 잘못되었습니다 ... 재미있는 일, InnerEx를 확인했고 귀하의 의견으로 돌아가서 다시 읽었습니다 ... 좋아요!
Andy Danger Gagne 2011

통합 보안을 사용하고 있었기 때문에 IIS AppPool에는 필요한 권한이 없었습니다.
Vincent Vancalbergh

+1-(내 홈 IP가 변경됨) 오류 메시지 : 로그인에서 요청한 서버 'SERVERNAME'을 열 수 없습니다. IP 주소가 'MY_OLD_IP'인 클라이언트는 서버에 액세스 할 수 없습니다. 액세스를 활성화하려면 SQL Azure Portal을 사용하거나 master 데이터베이스에서 sp_set_firewall_rule을 실행하여이 IP 주소 또는 주소 범위에 대한 방화벽 규칙을 만듭니다. 이 변경 사항이 적용 되려면 최대 5 분이 걸릴 수 있습니다. \ r \ n'MYADMINACCT '사용자가 로그인하지 못했습니다. \ r \ n이 세션에는'GUID '추적 ID가 할당되었습니다. 도움이 필요할 때 고객 지원에이 추적 ID를 제공하십시오. "}
Dylan Hayes

8

Visual Studio에서 잘못된 프로젝트의 app.config 내에 연결 문자열을 배치 할 때이 문제가 발생할 수 있습니다.

예를 들어 EF 4.1 (출시 된 버전) 프로젝트 + WCF 데이터 서비스 프로젝트에서이 문제가 발생했으며 사용중인 데이터 서비스 프로젝트에 연결 문자열이 지정되어 있지 않다는 것을 알았습니다.


이것이 내 해결책이었습니다. 시작 프로젝트에 적절한 연결 문자열을 넣어야했습니다.
MickJuice

5

동일한 오류가 발생했으며 실제로 지정된 서버에 로그인하지 못했습니다. 구성 연결 문자열에서 "통합 보안"특성을 제거하고 작동했습니다.


이것은 나를 위해 일했습니다. 이 문제가있는 다른 사람은 다른 솔루션이 작동하지 않는 경우이 방법을 시도해야합니다.
저스틴

이 오류는 내 컴퓨터에서 SQL Express 서비스가 꺼져있을 때 발생했습니다.
John M

4

나는 같은 문제가 있었고 내 컨텍스트의 인스턴스 바로 뒤에 아래 코드를 추가했습니다 (예제에 의한 온로드)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

MvcMusicStore 앱에서 비슷한 문제가 발생했습니다. Web.config의 줄을 "Instance = true"에서 "Instance = false"로 변경했습니다. 때때로이 조정없이 작동하지만 차이점의 원인을 모르겠습니다. 이 http://msdn.microsoft.com/en-us/library/ms254504.aspx를 읽는 것은 실제로 도움이되지 않았습니다.


놀랍습니다 ... 이것은 나에게 적절한 해결책이었습니다. 나는 이유를 모른다.
Kees C. Bakker 2011

2

특정 권한 이유로 EF는 데이터베이스 연결을 만들 수 없습니다. 나는 하루 종일 같은 문제에 직면했다. 마지막으로 다음 솔루션을 시도해 보았고 작동했습니다 .a / IIS 열기 (IIS 7을 사용하고 있습니다) b / 웹 사이트에서 사용중인 appool의 고급 설정 열기 (예 : DefaultAppPool) c / 프로세스 모델 그룹을보고 ID 값을 변경합니다. "Localsystem"으로

당신과 함께 일하기를 바랍니다.


2

나는 단지 같은 문제를 겪고
있었다. 나를 위해 일한 해결책은 :
클라이언트 네트워크 구성 도구를 실행하고 (실행에 cliconfg 입력)
TCP / IP가 활성화되어 있는지 확인 하는 것이었다 .


2

나는 마침내 그것을 깨뜨렸다-그것이 허가 때문이라고 생각하는 약간의 거위 추격 후에.

계시 : SQL 프로파일 러 사용

(참고 : 최근에 EF6에서 EF5로 다운 그레이드했습니다.)

SQL 프로파일 러를 사용하여보고 된 오류 이전에 실행 된 마지막 SQL을 빠르게 찾았습니다.

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

잘보세요-마이그레이션과 관련이 있습니다. 그것은 __MigrationHistory테이블을 보고 있습니다 -그것이 생성되었다는 것을 깨닫지 못했습니다 (이미 CSPROJ에서 마이그레이션을 지 웠습니다).

따라서 해당 테이블의 행을 가져 와서 특정 제품 버전 (v6)과 연결되어 있는지 확인합니다.

여기에 이미지 설명 입력

나는 실제로 EF6 (처음에 설치하려고하지 않았던)에서 EF5 (스캐 폴딩과 더 잘 호환 됨)로 다운 그레이드했고 문제가 시작되었을 때 그렇게했습니다.

내 생각 엔 Model (<Binary data>)열이 이전 버전과 호환되지 않는다는 The provider did not return a ProviderManifest instance것입니다. 따라서 디코딩 할 수 없기 때문에 오류가 발생합니다.

나는 잃을 것이 없었고이 테이블을 완전히 지우고 실행 Update-Database -Verbose한 다음 백업 및 실행되었습니다.

고급 환경에 있거나 이미 프로덕션에있는 경우이 테이블을 지우는 것이 해결책이 아닐 수 있지만이 방법을 사용하면 작업을 바로 시작할 수 있습니다.


나는 완전히 __MigrationsHistory 테이블을 삭제하고 함께 rescaffolding 결국 Add-MigrationUpdate-Database -Verbose -Force. 여기에 명령 참조입니다 coding.abel.nu/2012/03/ef-migrations-command-reference은
Simon_Weaver

중요한 점은이되지 단독 사용 권한 오류가있는
Simon_Weaver

1

Visual Studio 11 Beta를 EF4.1 및 ASP.NET MVC와 함께 사용하면서 나는 거의

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

내 문제를 해결하기 위해 Application_Start로 이동하여

Database.DefaultConnectionFactory = new SqlConnectionFactory ( "데이터 소스 = (localdb) \ v11.0; 통합 보안 = True; MultipleActiveResultSets = True");

...에

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "데이터 소스 = (localdb) \ v11.0; 통합 보안 = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");Mainmehod 에 추가되었습니다 . 이제 매력처럼 작동합니다! 정말 고마워.
rotgers

1

이 오류는 .edmx 파일이 열려있는 동안에 만 표시되며 파일을 다시 닫으면 사라집니다.

CodePlex 의이 인용문은 나와 함께 일했습니다 (Visual Studio 2013 / MVC 5).


저도 같이 일했습니다. edmx 파일을 닫았다가 다시 열어 보았습니다. 일했다.
Rohit

1

EF Code First를 사용하는 경우 고려해야 할 또 다른 사항은 때때로 DbContext 클래스에 대한 백업 데이터베이스를 자동으로 생성하지 않는다는 것입니다. 해결책은 사용자 고유의 연결 문자열을 추가하는 것입니다. Simple Membership Provider를 지원하는 사용자 / 등록 데이터베이스를 템플릿으로 처리하기 위해 존재할 수있는 연결 문자열을 사용할 수 있습니다. 마지막으로 생성 한 DbContext 클래스에 대한 기본 생성자를 추가해야합니다.

public ChaletDb():base("ChaletConnection")
    {

    }

여기서 web.config 파일에 입력 한 연결 문자열의 이름은 DbContext가 데이터베이스를 생성하도록 지시하는 데 사용됩니다. 아주 가끔 데이터베이스 (SQL Server Management Studio에서)를 수동으로 만들어야 작동하도록 요청했습니다.


0

솔루션에 여러 프로젝트가 있고 각 프로젝트에 EF를 다른 시간에 추가했습니다. 일부 컴퓨터에서는 작동 중이었고 일부에서는 앞서 언급 한 오류로 인해 실패했습니다. 내 프로젝트의 app.config 중 일부에 다음과 같은 내용이 있음을 알아 차리는 데 시간이 걸립니다.

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

LocalDb (새로운 "sql express"와 같은)를 사용하는 경우 괜찮지 만 특정 서버가 설치되어 있지 않고 일반 SQL을 사용하는 경우에는 완전히 잘못되었습니다.

해결책 : 위의 코드를 제거하십시오.


0

SQL 서버 연결이 실패했기 때문입니다.

프로세스를 실행중인 사용자 계정에 SQL Server에 대한 액세스 권한이 있는지 확인하십시오.

종속성 주입을 사용하는 것과 같이 상위 스레드에서 DbContext를 생성 한 다음 다른 사용자를 가장하는 경우이 오류가 발생합니다. 해결책은 새 스레드 또는 새 가장 컨텍스트 내에서 DbContext를 생성하는 것입니다.


0

방금 Visual Studio의 모든 인스턴스를 닫고 솔루션을 다시 열었습니다.

실제로 무슨 일이 일어 났는지 모르겠지만 두 개의 다른 로컬 작업 공간에서 동일한 솔루션을 열었습니다 (하나는 로컬 변경, 하나는 변경되지 않은 리포지토리 소스 코드). 저는 postgres DB, Entity Framework 6, Visual Studio 2013 및 ASP.NET MVC 5로 작업합니다.


0

엔터티 프레임 워크에 오류가 있었지만 위의 답변 중 어느 것도 마침내 작동 한 솔루션에 적합하지 않았습니다.

내 EntityFramework Code First Models 및 DataContext는 WebAPI 기본 프로젝트와 별도의 프로젝트에 있습니다. 코딩 라인의 어딘가에있는 내 Entity Framework 프로젝트가 시작 프로젝트로 설정되었으므로 마이그레이션을 실행할 때 "공급자가 ProviderManifestToken 문자열을 반환하지 않았습니다"... 연결 문제가 발생했습니다.

DB에 대한 ConnectionString이 WebAPI Main 프로젝트의 Web.config 파일에 있기 때문에 마이그레이션을 실행할 때 연결 문자열이 검색되지 않았습니다. WebAPI 프로젝트를 내 startProject로 설정하여 성공적으로 연결할 수있었습니다.

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