2017-04-03 2 views
5

EF 6.0 및 SQL Server CE 4.0을 사용하고 있습니다. .sdf 파일은 암호로 보호되어있어 LinqPad로 파일을 열어 확인했습니다.Entity Framework를 사용하여 암호로 보호 된 SQL Server CE 데이터베이스를 여는 방법

using (var context = new MyDbContext("ExamManagement")) 
{ 
    context.Database.Initialize(false); 
} 

:

지정된 암호가 데이터베이스 암호

코드를 일치하지 않습니다 나는 다음과 같은 연결 문자열과 코드에서이 데이터베이스를 열려고 할 때, 나는 예외가 연결 문자열 :

<connectionStrings> 
    <add name="ExamManagement" 
     connectionString="Data Source=|DataDirectory|Pikeman.sdf;Max Database Size=4091;Password=123;" 
     providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 

enter image description here 스택 추적 : System.Data.Entity.Core.EntityClient.EntityConnection.Open()에서

System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection에서
(부울 shouldMonitorTransactions)
에서 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T] (Func을 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery
1 <> c__DisplayClass7.b__5() System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption에서
) 시스템에서
.Data.Entity.Core.Objects.ObjectQuery 1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext()
System.Linq.Enumerable.First [TSource (IEnumerable`1 소스)에서 이

+0

당신은 대부분 내 업데이트 스크린 샷을 참조하십시오 잘못된 연결 문자열 – ErikEJ

+0

를 사용에 대한 절대 경로를 지정하고 해당 경로에서 데이터베이스를 열어보십시오. 연결 문자열은 정확하지만'Password' 부분은 무시됩니다. –

+0

linqpad에서 올바른 데이터베이스 파일을 테스트 중입니까? bin/debug 폴더를보십시오. 아마 거기에 sdf 파일의 사본이있을 것입니다! – ErikEJ

답변

1

연결 문자열은 OK (보통 내가 최대 데이터베이스 크기를 지정하지 않으면, 당신은 매개 변수를 삭제하려고 할 수 있습니다하지만 난 ' 나는 이것이 문제가 아니라고 확신한다.)
그래서, 아마도 당신은 다른 암호를 사용하여 데이터베이스를 여는 중이라고 생각합니다 (예외가 제시 한 것처럼) 또는 잘못된 데이터베이스를 여는 것 같습니다. 예를

<connectionStrings> 
    <add name="ExamManagement" 
     connectionString="Data Source=C:\temp\Pikeman.sdf;Password=123;" 
     providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 
+0

Ok. 문제를 찾았습니다. 문제는 기본 DbContext 생성자가'app.config' 파일의 기본 연결 문자열과 다른 기본 연결 문자열을 사용하고 있다는 것입니다. DbMigrationsConfiguration이 데이터베이스를 시드 할 때 암호없이 기본 연결 문자열을 사용합니다.이 연결 문자열은'app.config' 연결 문자열과 동일한 디렉토리를 가리 킵니다. –