2017-04-03 12 views
5

Tôi đang sử dụng EF 6.0 và SQL Server CE 4.0. Tệp tin .sdf được bảo vệ bằng mật khẩu mà tôi đã xác minh bằng cách mở tệp bằng LinqPad. Khi tôi cố gắng để mở cơ sở dữ liệu này trong mã với chuỗi kết nối sau, tôi nhận được một ngoại lệ:Cách mở cơ sở dữ liệu SQL Server CE được bảo vệ bằng mật khẩu với Entity Framework

Mật khẩu quy định không phù hợp với mật khẩu cơ sở dữ liệu

Code:

using (var context = new MyDbContext("ExamManagement")) 
{ 
    context.Database.Initialize(false); 
} 

Chuỗi kết nối:

<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 Stack trace:

tại System.Data.Entity.Core.EntityClient.EntityConnection.Open()
tại System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection (shouldMonitorTransactions Boolean)
tại 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. <> c__DisplayClass7.b__5()
tại System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption)
tại hệ thống .Data.Entity.Core.Objects.ObjectQuery 1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext()
tại System.Linq.Enumerable.First [TSource] (IEnumerable`1 nguồn)

+0

Bạn có nhiều khả năng sử dụng một chuỗi kết nối sai – ErikEJ

+0

xin vui lòng xem ảnh chụp màn hình của tôi được cập nhật. Dường như chuỗi kết nối là đúng nhưng phần 'Mật khẩu' bị bỏ qua. –

+0

Bạn có đang thử nghiệm trong linqpad dựa vào tệp cơ sở dữ liệu chính xác không? Tìm trong thư mục bin/debug của bạn - có thể có một bản sao của tệp sdf ở đó! – ErikEJ

Trả lời

1

Các chuỗi kết nối là OK (thường là tôi không chỉ định Max Cơ sở dữ liệu Kích thước, bạn có thể thử để xóa các thông số nhưng tôi m khá chắc chắn đây không phải là vấn đề).
Vì vậy, trong trường hợp của bạn, tôi nghĩ bạn có thể mở một cơ sở dữ liệu với một mật khẩu khác (như trường hợp ngoại lệ gợi ý) hoặc bạn đang mở một cơ sở dữ liệu sai. Cố gắng xác định một đường dẫn tuyệt đối và mở cơ sở dữ liệu từ con đường đó, ví dụ

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

Ok. Đã tìm thấy sự cố. Vấn đề là constructor DbContext mặc định đã sử dụng một chuỗi kết nối mặc định khác với chuỗi trong tệp 'app.config'. Khi DbMigrationsConfiguration giống cơ sở dữ liệu, nó sử dụng chuỗi kết nối mặc định không có mật khẩu, điều này sẽ xảy ra để trỏ đến cùng thư mục với chuỗi kết nối 'app.config'. –

Các vấn đề liên quan