使用 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 模板获取实体框架的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

获取实体框架连接字符串

POCO库中文编程参考指南(10)如何使用TCPServer框架?

没有主键和空列的表上的实体框架反向 poco

如何使用实体框架连接三个表来获取所有数据

使用T4模板为EF框架添加数据库实体注释(转)

提供者未返回 ProviderManifestToken 字符串实体框架