如何使用Entity Framework打开受密码保护的SQL Server CE数据库

Fra*_*Liu 5 entity-framework sql-server-ce

我使用的是EF 6.0和SQL Server CE 4.0.该.sdf文件受密码保护,我通过LinqPad打开文件验证了该文件.当我尝试使用以下连接字符串在代码中打开此数据库时,我得到一个异常:

指定的密码与数据库密码不匹配

码:

using (var context = new MyDbContext("ExamManagement"))
{
    context.Database.Initialize(false);
}
Run Code Online (Sandbox Code Playgroud)

连接字符串:

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

在此输入图像描述 堆栈跟踪:

位于System.Data.Entity.Core.EntityClient.EntityConnection.Open()
处于System.Data.Entity.Core.Object.Entity上的System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
中的System.Data.Entity. ](Func键1.<> c__DisplayClass7.b__5() 在System.Data.Entity.Core.Objects.ObjectQuery 1 forMergeOption) 在System.Data.Entity.Core.Objects.ObjectQuery 1.MoveNext() 在System.Linq.Enumerable .First [TSource](IEnumerable`1 source) 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery

1.GetResults(Nullable
1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator

bub*_*ubi 1

连接字符串没问题(通常我不指定最大数据库大小,您可以尝试删除该参数,但我很确定这不是问题)。
因此,就您而言,我认为您可能正在使用不同的密码打开数据库(如异常所示),或者您正在打开错误的数据库。尝试指定绝对路径并从该路径打开数据库,例如

<connectionStrings>
    <add name="ExamManagement" 
         connectionString="Data Source=C:\temp\Pikeman.sdf;Password=123;" 
         providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)