如何使用实体框架

时间:2017-04-03 11:01:42

标签: 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);
}

连接字符串:

<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 堆栈跟踪:

  

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](Func 1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery
1.&lt;&gt; c__DisplayClass7.b__5()
  在System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption)
  在System.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 source)

1 个答案:

答案 0 :(得分:1)

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

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