나는 사용하던 .mdf
A를 연결하는database
하고 entityClient
. 이제 .mdf
파일 이 없도록 연결 문자열을 변경하고 싶습니다 .
다음이 connectionString
맞습니까?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
항상 오류가 발생하기 때문에 :
기본 공급자가 Open에서 실패했습니다
답변
이 오류가 발생하여 몇 가지 해결책을 찾았습니다.
연결 문자열을 보면 유효 해 보입니다. 이 블로그 게시물을 찾았 는데 여기서 문제는 통합 보안 을 사용하고 있다는 것 입니다. IIS에서 실행중인 경우 IIS 사용자는 데이터베이스에 액세스해야합니다.
Transactions와 함께 Entity Framework 를 사용하는 경우 Entity Framework 는 각 데이터베이스 호출과의 연결을 자동으로 열고 닫습니다. 따라서 트랜잭션을 사용할 때 여러 연결을 통해 트랜잭션을 분산 시키려고합니다. 이것은 MSDTC로 상승 .
내 코드를 다음과 같이 수정했습니다.
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
답변
context.Connection.Open()
내 문제를 해결하는 데 도움이되지 않았으므로 DTC 구성에서 “원격 클라이언트 허용”을 사용하려고 시도했지만 더 이상 오류가 없습니다.
Windows 7에서는 dcomcnfg, 구성 요소 서비스-> 컴퓨터-> 내 컴퓨터-> 분산 트랜잭션 코디네이터-> 로컬 DTC-> 보안을 마우스 오른쪽 단추로 실행하여 DTC 구성을 열 수 있습니다.
답변
당신은 볼 수 의 InnerException가 오류로 던지는의 내부 원인이 무엇인지 확인합니다.
필자의 경우 원래 오류는 다음과 같습니다.
실제 파일 “D : \ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf”를 열 수 없습니다. 운영 체제 오류 5 : “5 (액세스가 거부되었습니다.” “). 파일 D : \ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf에 대해 자동 명명 된 데이터베이스를 연결하지 못했습니다. 이름이 같은 데이터베이스가 있거나 지정된 파일을 열 수 없거나 UNC 공유에 있습니다.
파일 속성을 사용하여 관련 mdf
및 ldf
파일 에 액세스하기 위해 현재 사용자에게 모든 권한을 부여하여 해결되었습니다 .
답변
문제는 다음 변형 중 하나의 연결 문자열 내에 서버 경로가 있다는 것입니다.
SERVER\SQLEXPRESS
SERVER
내가 정말로해야 할 때 :
.\SQLEXPRESS
어떤 이유로 든 SQL 인스턴스를 찾는 데 어려움이있을 때마다 오류가 발생했습니다.
답변
이것은 일반적인 문제입니다. 심지어 나는이 문제에 직면했다. Windows 인증으로 구성된 개발 시스템에서 완벽하게 작동합니다.
<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
동일한 구성으로 IIS에서 호스팅하면이 오류가 발생합니다.
기본 공급자가 Open에서 실패했습니다
connectionString
구성 파일에서 변경 되어 해결 되었습니다.
<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
다른 일반적인 실수는 다음과 같습니다.
- 데이터베이스 서비스가 중지 될 수 있습니다
- Windows 인증을 사용하고 IIS에서 호스팅되는 로컬 데이터베이스를 가리키는 데이터 소스 속성
- 사용자 이름과 비밀번호가 잘못되었을 수 있습니다.
답변
이 예외를 수신하면 세부 사항을 펼치고 내부 예외 세부 사항을 살펴보십시오 . 이유에 대한 세부 사항이 제공됩니다. 로그인 실패 . 필자의 경우 연결 문자열에 내 데이터베이스에 액세스 할 수없는 사용자가 포함되었습니다.
통합 보안 (로그인 된 Windows 사용자의 컨텍스트)을 사용하는지 또는 개별 SQL 계정을 사용하는지에 관계없이이 문제를 방지하기 위해 액세스하려는 데이터베이스에 대해 ‘보안’에서 사용자에게 적절한 액세스 권한이 있는지 확인하십시오.