2012-10-12 25 views
10

Tôi đã thử một dự án EF đầu tiên với SQL Compact 4.0. Khi tôi thử chạy dự án, tôi nhận được thông báo lỗi "CREATE DATABASE permission bị từ chối trong cơ sở dữ liệu 'master'.".Khung thực thể kết nối với SQLEXPRESS không phải SQL Compact

Tôi đã tìm kiếm trợ giúp và trả lời một số blog đã cố gắng xác định chuỗi kết nối đang được sử dụng. Trước sự ngạc nhiên của tôi nó là

context.Database.Connection.ConnectionString "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" string 

mặc dù tập tin web.config của tôi bao gồm các phần sau ...

<connectionStrings> 
    <add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" /> 
</connectionStrings> 

<system.data> 
<DbProviderFactories> 
    <remove invariant="System.Data.SqlServerCe.4.0" /> 
    <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
</DbProviderFactories> 
</system.data> 

Có ai bất kỳ ý tưởng tại sao EF được nhấn mạnh vào việc tạo ra một kết nối đến SQLEXPRESS thay vì SQL Gọn nhẹ? Tôi không thể tìm thấy tham chiếu nào cả ở SQLEXPRESS ở bất kỳ đâu trong giải pháp.

Trả lời

2

Look cho <entityFramework> phần trong web.config của bạn, nó sẽ có nhà máy kết nối mặc định của bạn có:

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

Nếu bạn đang làm một dự án mã đầu tiên, bạn cũng có thể thay đổi constructor mặc định của bạn để sử dụng chuỗi kết nối khác của bạn:

bài giao dịch
public YourContext() : base("name=DefaultConnection") 
{ 

} 
+0

Các phần là như sau ...

+0

Hãy thử thêm một giá trị cho defaultConnectionFactory của bạn với chuỗi kết nối của bạn hoặc thay đổi hàm tạo mặc định của bạn để nó nhắm mục tiêu chuỗi kết nối khác của bạn –

1
+0

Cảm ơn bạn đã đăng câu trả lời của mình! Xin lưu ý rằng bạn nên đăng các phần thiết yếu của câu trả lời ở đây, trên trang web này, hoặc bài đăng của bạn có nguy cơ bị xóa [Xem Câu hỏi thường gặp ở đó đề cập đến câu trả lời 'không chỉ là liên kết'.] (Http: // stackoverflow. com/faq # deletion) Bạn vẫn có thể bao gồm liên kết nếu bạn muốn, nhưng chỉ là 'tham chiếu'. Câu trả lời nên tự đứng lên mà không cần liên kết. – Taryn

3

Thay vì sử dụng sau đây để vượt qua tên kết nối của bạn đến DBContext

public YourContext() : base("DefaultConnection") 
{ 

} 

Sử dụng tên chỉ

public YourContext() : base("name=DefaultConnection") 
{ 

} 

này sẽ cho EF sử dụng thông số như một kết nối.

Ngoài việc thêm "rõ ràng" ở đầu phần kết nối của bạnBắt buộc trong web.config có thể giải quyết các vấn đề thừa kế.

+0

Đối với EF6 nếu bạn thêm 'tên' vào ngữ cảnh bạn gặp lỗi" "Kết nối với tên đó không tìm thấy" ' – user3402754

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