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

本文关键字:迁移 代码 数据库 | 更新日期: 2023-09-27 18:30:43

我有以下连接字符串:

<?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>

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

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

然后我得到这个异常:

参数"xmlReader"无效。必须至少提供一个 .ssdl 项目。

连接字符串是否错误,如果我使用代码优先,为什么需要 ssdl?

注意

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

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

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

编辑

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

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

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

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

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

您正在尝试使用旨在与数据库优先/模型优先一起使用的连接字符串。您可以分辨,因为您的提供程序名称是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

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