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

How to open a password protected SQL Server CE database with Entity Framework

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

The specified password does not match the database password

代码:

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>

堆栈跟踪:

at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)<br> at System.Data.Entity.Core.Objects.ObjectQuery1.<>c__DisplayClass7.b__5()
at System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()<br> at System.Data.Entity.Internal.LazyEnumerator1.MoveNext()
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)

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

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