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

时间:2011-08-03 00:34:29

标签: entity-framework entity-framework-4.1 connection-string poco

我无法使用配置文件,我必须在运行时初始化数据库connetcion。它是SQL Server 2008数据库。

由于我将EF更新为更新的ADO.NET Entity Framework 4.1 - Update 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是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)

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

我做错了什么? 感谢

2 个答案:

答案 0 :(得分:3)

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

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

并在创建dbContext时传递

 YourContext(entityBuilder.ToString())

答案 1 :(得分:0)

您仍然可以使用配置文件,配置以默认值启动,您可以在运行时更改该值,具体为其设计的值,并且可以设置为应用程序范围或每个用户范围。所以从空配置设置开始在运行时构建你的字符串并将其设置为配置文件并从中读取你的应用程序我经常这样做。

我将在明天开始工作时发布一些示例代码