如何在运行时处理EF 4.1的动态连接字符串



我不能使用配置文件,我必须在运行时初始化数据库连接。SQL Server 2008数据库。

因为我更新了EF到更新的ADO。. NET实体框架4.1 -更新1,Database.Connection.ConnectionString不再为我工作了。配置文件中的连接字符串对我来说很好,但我需要动态地定义它。所以我找到了另一种流行的方法,通过DefaultConnectionFactory,像这样:

Database.DefaultConnectionFactory = 
    new SqlConnectionFactory("Server=local;Initial Catalog=Db1;Trusted_Connection=True;")

然而,在这种情况下,我得到了错误消息,试图访问任何DbSet派生对象:提供程序没有返回ProviderManifestToken字符串。--> System.Data.SqlClient.SqlException:在建立到SQL Server的连接时发生与网络相关或特定实例的错误。未找到服务器或无法访问服务器。验证实例名是否正确,SQL Server是否配置为允许远程连接。(提供程序:Named Pipes提供程序,错误:40 -无法打开到SQL Server的连接)

更新:我只在数据库尚未创建并应该由EF重建的情况下遇到此问题。如果它存在,则在我查询Db以获取数据时不会发生此类异常。如果我在配置文件中定义完全相同的连接字符串,这两种情况对我来说都很好(数据库生成和数据查询)

我做错了什么?由于

您可以使用EntityConnectionStringBuilder类来构建上下文的连接字符串,

EntityConnectionStringBuilder entityBuilder =new EntityConnectionStringBuilder();
entityBuilder.Provider = "provider";
entityBuilder.ProviderConnectionString = "connectionString";

并在创建dbContext

时传递
 YourContext(entityBuilder.ToString())

你仍然可以使用配置文件,配置以默认值开始,你可以在运行时更改值,这是它们的设计目的,可以设置为应用程序范围或每个用户范围。因此,从一个空的配置设置开始,在运行时构建您的字符串,并将其设置为配置文件,并让您的应用程序从中读取,我经常这样做。

当我明天开始工作时,我会发布一些示例代码来处理这个问题

最新更新