我使用的是EF 6.0和SQL Server CE 4.0。 .sdf
文件受密码保护,我通过LinqPad打开文件验证了该文件。当我尝试使用以下连接字符串在代码中打开此数据库时,我得到一个例外:
指定的密码与数据库密码
不匹配
代码:
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()
在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)
1.&lt;&gt; c__DisplayClass7.b__5()
at System.Data.Entity.Core.Objects.ObjectQuery
在System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable
1 forMergeOption)
在System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
1.MoveNext()
at System.Data.Entity.Internal.LazyEnumerator
在System.Linq.Enumerable.First [TSource](IEnumerable`1 source)
答案 0 :(得分:1)
连接字符串正常(通常我没有指定最大数据库大小,你可以尝试删除参数,但我很确定这不是问题)。
因此,在您的情况下,我认为您可能正在使用不同的密码打开数据库(如异常所示)或您正在打开错误的数据库。
尝试指定绝对路径并从该路径打开数据库,例如
<connectionStrings>
<add name="ExamManagement"
connectionString="Data Source=C:\temp\Pikeman.sdf;Password=123;"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>