2

我有一个应用程序连接到具有相同模式的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(); 

     } 

对于试图在数据库中添加一个新的人的时候,现在我得到以下错误。

Unable to complete operation. The supplied SqlConnection does not specify an initial catalog or 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

+0

我没有得到对数据库的任何DefaultConnectionFactory。我是否需要在引用中包含任何程序集? – 2014-11-03 18:05:23

+0

实际上得到这个错误:成员的'System.Data.Entity.Database.DefaultConnectionFactory.get'不能与一个实例引用访问;如果我使用Database.DefaultConnectionFactory(没有上下文),那么代码运行时没有任何编译错误,但它仍然在SQL Server数据库(而不是CE)中写入,所以使用类型名称代替 – 2014-11-03 18:10:16

+0

。有什么建议么? – 2014-11-03 18:16:24

相关问题