2009-02-16 9 views
6

Tôi có một ứng dụng ASP.NET MVC đang sử dụng cơ sở dữ liệu SQLite thông qua Entity Framework. Mọi thứ đều hoạt động trên máy chủ web phát triển địa phương của VS 2008.Entity Framework + Triển khai SQLite

Tuy nhiên, việc triển khai các ứng dụng web để cung cấp dịch vụ của tôi gây ra lỗi này:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.] 
    System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959 
    System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35 

cung cấp dịch vụ đã nhận xét rằng họ không hỗ trợ SQLite. Tôi đã có mặc dù rằng SQLite là độc lập với các thiết lập của nhà cung cấp dịch vụ vì nó có thể triển khai App_Data.

Có kinh nghiệm nào về triển khai SQL Entity Framework + SQL thành công không?

Chúc mừng, -pom-

Trả lời

0

Các bạn đã thử thêm các DLL cần thiết (s) vào thư mục bin của ứng dụng của bạn? Bạn có thể muốn xem bài viết của Phil Haack trên Bin Deploying ASP.NET MVC để biết các ý tưởng về cách thực hiện điều này tự động.

+0

Xin chào, cảm ơn bạn đã trả lời. Vâng, tôi đã nhìn thấy blog của Phil. Tôi có thể triển khai ứng dụng ASP.NET MVC bình thường. Đó là sự kết hợp với Entity Framework + SQLite có vấn đề. Tôi đã tăng cả System.Data.Entity.dll và System.Data.SQLite.dll vào thư mục bin. Chưa có may mắn. – Pompair

+1

Hmmm. Có phải họ trong phần hội đồng của bạn trong cấu hình web? – tvanfosson

12

Bạn đang khó để được đọc sách này nữa, nhưng bạn đang bỏ lỡ những điều sau đây trong app.config của bạn (hoặc, đối với bạn, web.config):

<configuration> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite" /> 
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
      description=".Net Framework Data Provider for SQLite" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    </DbProviderFactories> 
    </system.data> 
</configuration> 

Cụ thể, nếu bạn sử dụng sqlite trong một thư viện được liên kết vào trang web của bạn, bạn phải thêm điều này vào tệp cấu hình của trang web - không phải thư viện! Điều này là do cách bạn tải nhà cung cấp: về cơ bản, bạn đang xác định thời gian chạy mà dll tải, sử dụng chuỗi "System.Data.SQLite" và định vị nhà cung cấp thích hợp được thực hiện bằng cách sử dụng cài đặt của mục nhập hội,, tổ hợp.

Edit: Bằng cách này, khi bạn đang viết các thư viện mà có một dependancy SQLite, bạn có thể tránh sự phức tạp này. Bạn không cần sử dụng DbProviderFactories để tìm kiếm sqlite khi chạy; bạn cũng có thể sử dụng sự phụ thuộc thời gian biên dịch, có thể dễ dàng hơn trong việc quản lý. Sau đó, bạn có thể bỏ qua phần app.config trên, và thay vào đó thay thế tất cả các trường hợp:

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection() 

với

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection() 

Nếu bạn làm như vậy, bạn đang sử dụng một cuộc gọi thư viện đơn giản để tạo ra các kết nối và không có lựa chọn thời gian chạy nào của nhà cung cấp db. Điều đó có thể ít linh hoạt hơn vì bạn không còn có thể trao đổi các nhà cung cấp dữ liệu thông qua tệp cấu hình, nhưng đối với nhiều thư viện là đủ. Thật không may, nếu bạn không kiểm soát mã thư viện, đây không phải là một tùy chọn.

+1

Cảm ơn câu trả lời ... – Funky81

+0

Cảm ơn. Điều này cũng làm việc cho tôi: trong một ứng dụng wpf tham chiếu đến một thư viện lớp với truy cập dữ liệu SQLite. –

0

SQLite cần sự cho phép đầy đủ sự tin cậy để triển khai ứng dụng ASP.NET. Nhiều nhà cung cấp dịch vụ lưu trữ được chia sẻ không cho phép điều đó. Bạn có thể wan't để kiểm tra này.