在运行时更改连接字符串——这是正确的方法吗?
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)。有什么建议吗?以上是关于在运行时更改连接字符串——这是正确的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章