Entity Framework - 分层设计 - 连接字符串应该放在哪里?

8
我正在使用分层架构,Entity Framework作为我的数据层,上面有一堆仓库包含Linq-To-Entities查询。数据层是一个项目,旁边是服务层和界面,即网站。
我希望我的网站负责指定实体模型的连接字符串。我该怎么做?
我正在使用单例方法来访问位于数据层内部的实体存储库。
谢谢。
2个回答

10

您可以将在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" />

它应该包含有关映射文件所在位置的所有信息。


3

在我的情况下,尽管我使用的是L2S而不是L2E,但建议应该适用。我有一个通用的配置库,从XML文件中获取信息。当需要数据上下文时,每个数据对象都有以下方法。当然,如果您愿意,它可以很容易地进行模板化。

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

    return new CalendarsAndListsDataContext(_conStr);
}

现在,最大的不足之处是连接字符串的更改需要应用程序重新启动,但在我的情况下,这并不是一个问题。


我喜欢你将配置分离到另一个项目中的想法。但是对于这个应用程序,我希望我的网站负责连接字符串。 - Peter
嗯,你的配置层没有必要只读。你可以将其设置为可读写,这样你就可以像这样做:ConfigurationLibrary.Config.AddSetting("ConnectionString","MyString")。然后你的网站仍然可以驱动连接字符串。 - Serapth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接