使用 POCO 模板获取实体框架的连接字符串
Posted
技术标签:
【中文标题】使用 POCO 模板获取实体框架的连接字符串【英文标题】:Get the connection string for Entity Framework using the POCO template 【发布时间】:2011-09-29 01:13:57 【问题描述】:我使用实体框架,我需要获取我的连接字符串,以便构建上下文。
我正在使用 POCO 模板。我的上下文对象有:
string ConnectionString = "name=MyAppConfigConnectionStringPropertyHere"
所以当我尝试构建我的上下文时,它会说
“在配置中找不到指定的命名连接,不打算与 EntityClient 提供程序一起使用,或者无效”
我在这个answer 中看到表明有一个GetConnectionString() 方法。但是谷歌搜索并没有引导我找到我需要添加以获取该方法的参考(默认情况下它不在我的项目中)。
所以,我不能认为我是第一个想要使用 POCO 模板为实体框架获取连接字符串的人。其他人是如何做到这一点的?我想我可以读入整个 app.config 文件并将其解析出来。不过好像应该没那么难。
任何提示都会很棒!
【问题讨论】:
【参考方案1】:对于 EF Core,使用:
context.Database.GetDbConnection().ConnectionString;
【讨论】:
【参考方案2】:对于实体框架 6.0,以下代码给出了当前的 ConnectionString。
context.Database.Connection.ConnectionString
【讨论】:
【参考方案3】:对于不使用 EF 4.1 的人来说,这是我所知道的最简单的方法:
using System.Data.EntityClient;
public static string GetConnectionString(ObjectContext context)
return ((EntityConnection)context.Connection).StoreConnection.ConnectionString;
【讨论】:
【参考方案4】:web.config 中必须存在一个连接字符串元素,指定名称用于上下文:
<configuration>
<connectionStrings>
<add name="MyAppConfigConnectionStringPropertyHere"
providerName="System.Data.SqlClient"
connectionString="Data Source...." />
</connectionStrings>
</configuration>
【讨论】:
我在类库项目中使用实体框架。我没有 web.config。所有连接字符串都在 App.confg 中,看起来更像这样:connectionString="metadata=res://*/MyDataModel.csdl|....
提供者名称是 providerName="System.Data.EntityClient"
这个connectionString有名字属性吗?它应该与您提到的传递给上下文的实际连接字符串匹配。
是的,有一个名称属性。它与连接字符串属性代码中name=
之后的部分相同。我只是不知道如何使用它从 App.config 加载实际的连接字符串并在代码中使用它。我试过ConfigurationManager.ConnectionStrings["MyAppConfigConnectionStringPropertyHere"].ConnectionString
,但失败了。当我挖掘连接字符串列表(使用调试器)时,我的连接字符串不在其中。 (它只连接到我的本地 sql 服务器)。
原来我在错误的 app.config 中有数据。保存我的实体的类库正在由一个不同的项目运行,该项目是 WCF 服务库。一旦我将连接字符串移到该 app.config 中,一切都很好。【参考方案5】:
我得到这样的数据库连接
var connection = (SqlConnection)_context.Database.Connection;
然后从连接中您获得ConnectionString
和您需要的其他信息
【讨论】:
如果连接字符串包含密码(密码不在字符串中),这似乎不起作用。以上是关于使用 POCO 模板获取实体框架的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章