2013-04-06 41 views
8

Lên đến EF5, để kết nối với SQL Server 2012, tất cả những gì cần thiết để đến là chỉ định một chuỗi kết nối mà trông giống như sau:Đang kết nối đến SQL Server với EF6

Data Source=.\SqlExpress;Initial Catalog=MyDatabase;Integrated security=True;MultipleActiveResultSets=True 

Phương pháp này không hoạt động với EF6, đưa ra ngoại lệ

Không tìm thấy nhà cung cấp khung thực thể nào cho 'System.Data.Odbc' ADO.NET provider. Đảm bảo cung cấp dịch vụ được đăng ký trong phần 'entityFramework' của tập tin ứng dụng cấu hình

Tôi không sử dụng app.config tập tin ở tất cả, tôi đang đi trên chuỗi kết nối để MyContext constructor. Tại sao nó cố gắng sử dụng nhà cung cấp Odbc ở tất cả, và thay vì không sử dụng System.Data.SqlClient?

Cần phải làm gì để kết nối với SQL Server với mã EF6 đầu tiên? Tôi đảm bảo rằng EntityFramework.dll và EntityFramework.SqlServer.dll đều có sẵn trong thư mục Ứng dụng. Tôi thậm chí đã bổ sung EF6 gói nuget v6.0.0.1 trong dự án WPF, mặc dù nó không trực tiếp sử dụng thư viện EF, và đảm bảo rằng tệp App.Config được tạo tự động (bởi nuget) được sao chép vào thư mục Application (Debug) - vẫn không sự thành công.

Tôi cũng đã cố gắng setprovider bằng tay trong mã:

public class OeeCoachConfiguration : DbConfiguration 
{ 
    public OeeCoachConfiguration() 
    { 
     SetProviderServices("System.Data.SqlClient", 
      System.Data.Entity.SqlServer.SqlProviderServices.Instance); 
    } 
} 

Vẫn không thành công. Kết cấu đề tài của tôi là như sau (giản thể):

dự án WPF - không có tham chiếu đến EF (cũng đã cố gắng bổ sung thêm tài liệu tham khảo EF)

ViewModel thư viện lớp - không có tham chiếu đến EF

lớp mẫu thư viện - có tham chiếu đến thư viện EF (cả hai dll)

Thư viện lớp dữ liệu - có tham chiếu đến thư viện UI (cả hai dll).

Tôi đang sử dụng phương pháp CodeFirst và thiết lập này hoạt động mà không gặp bất kỳ sự cố nào với EF5. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

Trả lời

7

Đối với tôi lỗi này đã được giải quyết bằng cách loại bỏ các gói Glimpse.ADO

Chỉnh sửa ngày 20 tháng 12 năm 2013 tôi tin rằng các gói Glimpse.ADO bây giờ hỗ trợ EF6, nhưng tôi đã không kiểm tra nó.

+0

Tôi không có bất kỳ quyền kiểm soát của bên thứ ba nào có liên quan đến ADO (hoặc EF). – Goran

+0

Chuỗi kết nối của bạn có chỉ định nhà cung cấp không? – taylonr

+0

Không, chuỗi kết nối của tôi chính xác như tôi đã viết trong câu hỏi. – Goran

2

Có, đối với tôi, nó đã được giải quyết bằng cách loại bỏ gói Glimpse.ADO và Glimpse.EF5. Cảm ơn bạn.

1

Tùy chọn 1: Thử thêm sau trong app.config của dự án thực thi.

<entityFramework>   
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

Phương án 2: Nếu bạn muốn sử dụng mã số đăng ký cung cấp dịch vụ dựa trên, hãy làm theo hướng dẫn trên Entity Framework Providers for EF6

  • Hãy chắc chắn rằng bạn có DbConfiguration trong lắp ráp giống như DbContext của ứng dụng của bạn.
5

tôi đã cùng một vấn đề và tôi cuối cùng đã thử các sau đây và nó làm việc (giữ thoáng EF5 & gói Glimpse ADO)

Trong web.config Tôi đã thêm một bản sao của dòng cung cấp dịch vụ hiện có nhưng thay đổi nó invariantName đến "System.Data.Odbc".

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.Odbc" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

Hy vọng điều này sẽ hữu ích.

Jonathan

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