2011-02-08 29 views
16

Tôi đang sử dụng Entity Framework và gần đây đã nhận ra lợi ích của việc có mô hình EF trong một dự án khác trong cùng một giải pháp để tôi có thể xây dựng nhiều UI từ nó.Mô hình Khung thực thể di chuyển vào thư viện lớp từ dự án web

Tôi đã chuyển nó sang dự án thư viện lớp mới và cập nhật tất cả các tham chiếu đến các thực thể trong dự án web để sử dụng dll mới do dự án tạo ra. Mọi thứ đã diễn ra suôn sẻ, ngoại trừ một cái bẫy nhỏ. Khi tôi chuyển EF sang dự án mới, bằng cách nào đó nó vẫn đang đọc chuỗi kết nối của nó từ web.config trong dự án web (đừng hỏi tôi làm thế nào bởi vì tôi không có đầu mối).

Tôi đã sử dụng "Mô hình cập nhật từ cơ sở dữ liệu" trong nhà thiết kế EF và không tìm thấy chuỗi kết nối (như tôi mong đợi sau khi chuyển nó sang dự án mới), vì vậy tôi đã sử dụng trình hướng dẫn để tạo chuỗi kết nối mới nó đã làm tốt. Chuỗi kết nối mới bây giờ nằm ​​trong App.config trong dự án thư viện lớp. Chuỗi kết nối trong cửa sổ thuộc tính là chính xác, và nhà thiết kế đang đọc nó từ App.Config. Tôi đã đi trước và xóa chuỗi kết nối khỏi Web.Config trong dự án web.

Bây giờ khi chạy các ứng dụng tôi nhận được lỗi sau:

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

Nếu tôi dán chuỗi kết nối trở lại vào Web.Config nó tất cả hoạt động tốt. Tôi không muốn tạo ra một mô hình EF mới từ đầu bởi vì nó là một mô hình khá phức tạp và tôi đã làm rất nhiều cơ cấu lại sau khi kéo từ DB. Tôi đã đổ qua tệp CS được tạo cũng như XML trong tệp edmx và không thể tìm thấy bất kỳ điều gì hữu ích. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao. Rõ ràng cho đến bây giờ, cho đến khi tôi con số này ra, tôi chỉ để lại chuỗi kết nối trong web.config vì, vì lý do gì, mà dường như làm việc.

Trả lời

20

Điều này là do thiết kế; trong khi tệp cấu hình trong thư viện lớp là những gì nhà thiết kế sẽ sử dụng, tệp cấu hình của ứng dụng thực tế là những gì sẽ được sử dụng khi chạy. Cho dù đó là Web.config cho một dự án ASP.NET hay App.config cho một dự án Winforms hay WPF, đó là tệp cấu hình ứng dụng (hoặc một cái gì đó cao hơn, như Machine.config) sẽ được sử dụng; tệp trong thư viện lớp không phải là một phần của ứng dụng.

Nếu bạn đang cố gắng cung cấp một mô hình EF sẽ hoạt động mà không phải chỉ định chuỗi kết nối trong tệp ứng dụng hoặc cấu hình web, bạn sẽ phải lưu trữ chuỗi kết nối theo cách khác (bạn luôn có thể khó mã hóa nó) và chuyển nó vào quá tải thích hợp của hàm tạo ngữ cảnh của bạn.

Giải pháp của tôi nói chung là cung cấp một hàm không tham số tĩnh trên chính bối cảnh gọi quá tải này bằng chuỗi kết nối thích hợp.

+3

Chờ, vậy điều đó có nghĩa là tệp app.config trong thư viện lớp là vô nghĩa? Không nên thư viện được biên dịch có quyền truy cập vào tài nguyên của chính nó? Làm thế nào là nó thậm chí còn biết về web.config trong dự án khác? – Chev

+2

@Chevex: Khi chạy, có, nó là vô nghĩa. Tập tin cấu hình không phải là một tài nguyên, nó chỉ là một tập tin cấu hình đó là một phần của dự án. Xây dựng dự án không làm gì với nó. Nó nhận thức được Web.config vì nó sử dụng trình quản lý cấu hình của .NET và ứng dụng khởi chạy (trong trường hợp của bạn là một ứng dụng web) hướng nó đến đó. –

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