多个数据库的代码优先迁移?

时间:2014-11-18 13:52:26

标签: c# entity-framework

我有以下连接字符串:

<?xml version="1.0" encoding="utf-8"?>
  <connectionStrings>
    <add name="MyContext" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string='data source=SQLSERVERDB;initial catalog=TestDB_CodeFirst;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

当我尝试启用迁移时,我首先收到警告:

  

无法确定有效的启动项目。使用项目&#39; MyApp.Model&#39;来代替。
  您的配置文件和工作目录可能未按预期设置   使用-StartUpProjectName参数显式设置一个。

然后我得到了这个例外:

  

参数&#39; xmlReader&#39;无效。必须至少提供一个.ssdl工件。

连接字符串是否错误?如果我使用Code First,为什么还需要ssdl?

注意

  • 我的上下文位于我的MyApp.Model文件夹所在的Migrations项目中。
  • 我的主要启动项目中没有连接字符串,因为从第二个数据库检索连接字符串,用户可以在登录应用程序时选择其中一个。
  • 我的MyApp.Model项目中只有一个连接字符串,它指向我的开发数据库。

另外,我的第二个问题是:

如果我使用CF迁移,每次用户第一次选择其他数据库时,是否会迁移所有数据库?

修改

我改变了如下所述的连接,并得到以下异常:

  

具有身份的项目&#39; table1&#39;已经存在于元数据集合中。   参数名称:item

必须注意的是,我对现有数据库进行了逆向工程。所以我不知道可能出了什么问题!

我还删除了Migrations文件夹并检查了数据库,但没有创建migration_history表。

1 个答案:

答案 0 :(得分:4)

您正在尝试使用设计用于Database First / Model First的connectionString。您可以告诉,因为您的providerName是System.Data.EntityClient而不是System.Data.SqlClient。

您的连接字符串应如下所示:

<connectionStrings>
    <add name="MyContext" 
         connectionString="Data Source=SQLSERVERDB; Initial Catalog=TestDB_CodeFirst;user id=***;password=***;"
        providerName="System.Data.SqlClient" />
</connectionStrings

虽然我建议使用Integrated Security而不是用户/密码。只是个人偏好。