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

Iva*_*ono 3 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>
Run Code Online (Sandbox Code Playgroud)

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

无法确定有效的启动项目。改用项目“MyApp.Model”。
您的配置文件和工作目录可能未按预期设置。
使用 -StartUpProjectName 参数明确设置一个。

然后我得到这个异常:

参数“xmlReader”无效。必须至少提供一个 .ssdl 工件。

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

笔记

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

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

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

编辑

我更改了如下所述的连接,但出现以下异常:

元数据集合中已存在标识为“table1”的项目。参数名称:项目

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

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

Dis*_*ile 6

您正在尝试使用旨在与数据库优先/模型优先一起使用的 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
Run Code Online (Sandbox Code Playgroud)

虽然我建议使用集成安全而不是用户/密码。不过只是个人喜好。