【发布时间】:2017-04-03 11:01:42
【问题描述】:
我正在使用 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>
在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()
在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)1.c__DisplayClass7.b__5()
at System.Data.Entity.Core.Objects.ObjectQuery
在 System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 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 源)
【问题讨论】:
-
您很可能使用了错误的连接字符串
-
请看我更新的屏幕截图。似乎连接字符串是正确的,但
Password部分被忽略了。 -
您是否在 linqpad 中针对正确的数据库文件进行测试?查看您的 bin/debug 文件夹 - 那里可能有 sdf 文件的副本!
-
连接字符串指向正确的 sdf 文件。如果我从目标目录中删除
.sdf,执行上面的代码将在目标目录中创建一个新的.sdf文件,没有任何异常。但是,新创建的数据库不受密码保护。同样,Password部分似乎被忽略了。 -
要查看问题是否与 EF 相关,您能否尝试从生成异常的同一代码位置打开具有相同连接字符串的 ADO.NET 连接。例如
context.Database.Connection.Open();或new SqlCeConnection("Data Source=|DataDirectory|Pikeman.sdf;Max Database Size=4091;Password=123;").Open();让我们知道。
标签: entity-framework sql-server-ce