在运行时更改连接字符串——这是正确的方法吗?

Posted

技术标签:

【中文标题】在运行时更改连接字符串——这是正确的方法吗?【英文标题】:Changing connection string at runtime – is this correct approach? 【发布时间】:2014-11-03 16:29:47 【问题描述】:

我有一个应用程序连接到具有相同架构的 SQL Server 和 SQL CE 数据库。我正在尝试探索是否可以使用相同的数据访问层来处理这两种类型的数据库。 SQL Server 似乎一切正常。连接到 SQL CE 时,我试图在运行时更改连接字符串,如下所示

static void Main(string[] args)
        
            Model1 db = new Model1();

            String CEConnectionString = @"Data Source=|DataDirectory|\EmployeesCE.sdf;;Password=mypassword;Persist Security Info=True";
            db.Database.Connection.ConnectionString = CEConnectionString;
            db.Persons.Add(new Person()  ID = 33, Name = "Sam", Description = "new stuff" );
            db.SaveChanges();

        

现在我在尝试在数据库中添加新人时遇到以下错误。

无法完成操作。提供的 SqlConnection 不 指定初始目录或 AttachDBFileName。

这是在运行时更改连接字符串以使用 SQL CE 数据库的正确方法吗?如果是这样,SQL CE 应该使用什么连接字符串来解决这个问题?

【问题讨论】:

【参考方案1】:

您需要使用基于代码的配置更改 DefaultConnectionFactory:

public class MyConfiguration : DbConfiguration 
 
    public MyConfiguration() 
     
        SetDefaultConnectionFactory(new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0","...","...")); 
     
 

http://msdn.microsoft.com/en-us/data/jj680699.aspx

【讨论】:

我没有得到任何用于数据库的 DefaultConnectionFactory。我需要在引用中包含任何程序集吗? 实际上得到这个错误:无法使用实例引用访问成员'System.Data.Entity.Database.DefaultConnectionFactory.get';改为使用类型名称来限定它 如果我执行 Database.DefaultConnectionFactory(没有上下文),那么代码运行时没有任何编译错误,但它仍然写入 SQL Server 数据库(而不是 CE)。有什么建议吗?

以上是关于在运行时更改连接字符串——这是正确的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 表更改仅在第二个程序运行后可见

在运行时更改连接字符串并重新加载 app.config

实体框架在运行时更改连接

在运行 azure app 服务时更改连接字符串

如何动态更改EF的DBContext的连接字符串

如何正确暂停/停止线程?