2017-04-03 9 views
5

EF 6.0とSQL Server CE 4.0を使用しています。 .sdfファイルはパスワードで保護されており、LinqPadでファイルを開いて確認しました。私は次の接続文字列を使用してコードでは、このデータベースを開こうとすると、私は例外を取得:エンティティフレームワークでパスワードで保護されたSQL Server CEデータベースを開く方法

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で
(ブールshouldMonitorTransactions)
でSystem.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](機能> c__DisplayClass7.b__5()System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOptionで
)システムで
.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元)で が

+0

あなたが最も可能性が高い私の更新のスクリーンショットを参照してください。間違った接続文字列 – ErikEJ

+0

を使用しているため、絶対パスを指定し、そのパスからデータベースを開くようにしてください。接続文字列は正しいと思われますが、 'Password'部分は無視されます。 –

+0

正しいデータベースファイルに対してlinqpadでテストしていますか?あなたのbin/debugフォルダを見てください。おそらくそこにsdfファイルのコピーがあります! – ErikEJ

答えて

1

接続文字列はOKです(通常はIが最大データベースサイズを指定していない、あなたはパラメータを削除しようとすることができますが、私は」これは問題ではないと確信しています)。
あなたのケースでは、別のパスワード(例外が示唆しているように)を使用してデータベースを開いているか、間違ったデータベースを開いている可能性があります。 例

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

Ok。問題が見つかりました。問題は、デフォルトのDbContextコンストラクタが 'app.config'ファイルのものとは異なるデフォルトの接続文字列を使用していたことです。 DbMigrationsConfigurationがデータベースをシードすると、デフォルトの接続文字列がパスワードなしで使用されます。これは、 'app.config'接続文字列と同じディレクトリを指しています。 –

関連する問題