2012-12-20 15 views
8

Tôi có một dự án thư viện F # mà tôi đang sử dụng từ dự án web C#. Tôi muốn sử dụng nhà cung cấp loại thực thể khung trong dự án F # của tôi, và có nó nhận được chuỗi kết nối từ Web.config - nhưng tôi đang gặp khó khăn khi làm việc này.Làm cách nào để làm cho Nhà cung cấp Loại khung thực thể sử dụng tệp cấu hình thời gian chạy?

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true> 

Khi thiết kế, tôi cần có tệp App.config trong dự án thư viện F # với chuỗi kết nối có tên trùng khớp.

Khi chạy, khi gọi mã F # của tôi từ dự án web C#, tôi gặp lỗi khi không thể định vị tệp "App.config". Điều này làm tôi ngạc nhiên, bởi vì tôi đã mong đợi rằng trong thời gian chạy nó sẽ chỉ sử dụng ConfigurationManager.ConnectionStrings để tải chuỗi kết nối từ tệp cấu hình hiện đang hoạt động (trong trường hợp của một ứng dụng web, Web.config). Tuy nhiên điều này dường như không đúng.

tôi đã cố gắng thêm ConfigFile tham số:

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", ConfigFile="Web.config", Pluralize=true> 

Nhưng điều này chỉ làm cho nó phàn nàn lúc thiết kế mà nó không thể tìm thấy Web.config.

Sau đó, tôi đổi tên tệp App.config trong dự án thư viện F # thành Web.config và điều đó dường như đã khiến mọi thứ hoạt động. Tuy nhiên, tôi không thoải mái về giải pháp này. Đây có thực sự là cách nó dự định hoạt động không? Tôi phải có tệp web.config trong dự án thư viện của mình? Tôi sẽ làm gì nếu tôi muốn sử dụng cùng một thư viện từ một dòng lệnh thực thi, và trong môi trường đó tệp cấu hình được gọi là AssemblyName.exe.config?

Bắt buộc phải viết mã cứng tên của tệp cấu hình có thể có tên khác trong các ngữ cảnh khác nhau có vẻ rất dễ vỡ và thiết kế kém. Vui lòng cho tôi biết tôi đang thiếu thứ gì đó.

Trả lời

3

Sự cố bạn gặp phải có vẻ không may là thực sự đáng tiếc và tôi không biết bạn có đang thiếu điều gì đó hay không. Tuy nhiên, số SqlEntityConnection documentation nói rằng FooDb phải có quá tải GetDataContext trong đó có thể sử dụng tham số "connectionString khi chuỗi kết nối được xác định khi chạy." Có lẽ điều đó sẽ cung cấp cho bạn một công việc đủ phong nha xung quanh (tức là vượt qua trong chuỗi kết nối từ số ConfigurationManager.ConnectionStrings mình).

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