實體框架 - 分層設計 - 在哪裡放置連接字符串?

c# data-access-layer entity-framework n-tier

我正在使用一個分層架構,將實體框架作為我的數據層,頂部有一堆存儲庫,其中包含Linq-To-Entities查詢。數據層是一個項目,旁邊是我有一個服務層和接口,這是一個網站。

我希望我的網站負責為我的實體模型指定連接字符串。我該怎麼做呢?

我使用單例方法到達我的實體存儲庫,該存儲庫位於數據層內。

謝謝

一般承認的答案

您可以將在DAL程序集的App.Config中創建的連接字符串複製到web.config的connectionStrings部分。

您可以將連接字符串保留在程序集dll中,但不應將其與網站一起部署。

您需要復制整個連接字符串。它應該如下所示:

<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

它應該包括映射文件存在位置的所有信息。


熱門答案

在我的情況下,雖然我使用L2S而不是L2E,但建議應該成立。我有一個通用的Config庫,它從XML文件中提供。當需要數據上下文時,每個數據對像都有如下方法。當然,如果您願意,它可以很容易模板化。

private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
    if (_conStr == null)
    {
        _conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
    }

    return new CalendarsAndListsDataContext(_conStr);
}

現在,最大的缺點是連接字符串更改需要重新啟動應用程序,但在我的情況下,這不是問題。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因