Mysql 使用EF6(和代码优先迁移)针对不同的数据库系统

Mysql 使用EF6(和代码优先迁移)针对不同的数据库系统,mysql,sql-server,database,entity-framework,entity-framework-migrations,Mysql,Sql Server,Database,Entity Framework,Entity Framework Migrations,我的项目(WPF、.NET4.5、EF6)必须针对不同的DBMS,到目前为止,它是MSSQL、Oracle、MySql和Firebird。 我首先创建与dbs相关的脚本来生成数据库,然后使用EntityFrameworksDatabase-First方法来创建模型。通过使用基于MSSQL的默认edmx并为其他提供程序创建单独的ssdl(可以在连接字符串中配置不同的ssdl文件),所有dbms都运行得非常好。 我现在看到的问题是为更多的客户维护4个或更多不同dbms的安装/更新。我们不会向客户发送

我的项目(WPF、.NET4.5、EF6)必须针对不同的DBMS,到目前为止,它是MSSQL、Oracle、MySql和Firebird。 我首先创建与dbs相关的脚本来生成数据库,然后使用EntityFrameworksDatabase-First方法来创建模型。通过使用基于MSSQL的默认edmx并为其他提供程序创建单独的ssdl(可以在连接字符串中配置不同的ssdl文件),所有dbms都运行得非常好。 我现在看到的问题是为更多的客户维护4个或更多不同dbms的安装/更新。我们不会向客户发送管理员来安装更新,而是需要一个通用的安装/更新例程。这是可能的,但您必须为每个dbms维护不同版本的sql脚本,以及处理这些脚本并知道为哪个数据库执行哪个脚本的安装工具(取决于dbms和当前版本)

在寻找替代方案时,我遇到了EF Code First迁移,并尝试切换到这种方法。到目前为止,我的尝试都是基于MSSQL和MySql的

当我坚持使用MSSQL或MySql时,一切都很好。创建迁移,将它们应用于现有或不存在的数据库,所有这些都非常有效。 但我坚持把这两个系统结合起来。例如,将基于MSSQL的迁移应用到MySql似乎是不可能的。将创建数据库,但由于类型不匹配等原因,无法连接。 我猜“_Migration”表包含一个基于MSSQL创建的模型,该模型现在与MySql提供程序不兼容。只是一个理论,但也许有人知道得更清楚

有人知道这个问题的解决方案吗?是否有任何方法可以使用EF针对不同的dbms? 我不敢相信我是唯一一个有这个问题的人,但真的很难找到任何关于这个问题的信息。
非常感谢您的帮助,甚至指导我使用其他方法,而不是那样使用EF或使用EF。

我也遇到过同样的情况,但我找到了简单的解决方法。您所需要的只是为每个启用迁移的数据库系统创建单独的项目。在您的情况下,两个数据库上下文应该继承一个基本上下文,其中保存了所有模型构建器和数据库集

示例模型:

//MyModel.Base.csproj
公共类人物{/*..*/}
公共类BaseDbContext:DbContext
{
公共数据库集人物{get;set;}
/*...*/
}
//MyModel.Sql.csproj
公共类SqlDbContext:BaseDbContext{}
//MyModel.MySql.csproj
公共类MySqlDbContext:BaseDbContext{}
也许有两个迁移设置这不是什么好主意,但您可以在迁移中使用一些特定于数据库的脚本