2012-01-09 58 views
4

我正在寻找一些关于如何减少我的实体框架库对app或web.config文件依赖性的建议。我的应用包含一个ADO.NET实体数据模型。减少实体框架库对app.config的依赖

我当前在Web项目中引用此库,但为了这样做,我必须在部署之前将连接字符串添加到Web应用程序的web.config。

我现在有要求使用独立的DLL,我无法改变父项目的配置文件,以包括我的EF库。

什么是最好的方式来存储我的连接字符串,但保持我的EDMX的完整性,我应该在哪里引用它?

+0

这个问题可能有所帮助:http://stackoverflow.com/questions/161763/putting-configuration-information-in-a-dll – 2012-01-09 11:40:00

+1

你应该有你的app.config中的连接字符串和你参考的DLL应该有一个属性,你可以从调用程序中获取和设置。 – Ash 2012-01-09 11:43:06

+0

@AshwaniRoy我不希望调用程序对连接字符串有任何控制。 – Nick 2012-01-09 11:44:46

回答

7
EntityConnectionStringBuilder builder = New EntityConnectionStringBuilder(); 
builder.Metadata = 
    "res://*/Entities.VDMFinance.csdl|res://*/Entities.YourEntities.ssdl|res://*/Entities.YourEntities.msl"; 
builder.Provider = "System.Data.SqlClient"; 
builder.ProviderConnectionString = yourConnectionString; 
Dim dc As New YourEntities(builder.ConnectionString) 
dc.CommandTimeout = 0; 

您可以从静态工厂初始化您的所有数据上下文,并始终执行此操作。您可以从创建实体时生成的初始连接字符串中获取元数据和提供程序。

+0

感谢您的提示。你能建议我应该如何告诉我的实体框架使用这个作为我的连接字符串定义? – Nick 2012-01-09 11:58:03

+0

@Nick您可以通过将EF传递给数据上下文的构造函数来告诉EF。这发生在例子的最后一行(上面)中。 – 2012-01-09 13:30:02

3

在主web.config/app.config中指定配置对所有.NET应用程序都是通用的。即使是大型产品使用它。试图避免它没有任何好处。

如果您希望.dll管理连接字符串,它必须从某处读取它 - 可能来自自定义配置文件,其文件名为硬编码在您的库中。一旦你有连接字符串加载,你可以传递给你的ObjecContext的构造函数@linkerro显示。