【发布时间】:2014-08-04 15:20:08
【问题描述】:
我希望我的应用程序能够使用各种数据库,例如 MSSQL、MySQL 和 SQLite。通过更改配置中的连接字符串,连接工作得很好,我设法像这样应用数据库特定的配置:
public class ServerDbConfiguration : DbConfiguration
{
public ServerDbConfiguration()
{
switch (ConfigurationManager.AppSettings["DatabaseProvider"].ToUpper())
{
case "MYSQL":
SetHistoryContext("MySql.Data.MySqlClient", (conn, schema) => new ServerHistoryContext(conn, schema));
break;
default:
break;
}
}
}
现在我正在寻找一种通过迁移实现相同目标的方法。对 MSSQL 数据库运行 Add-Migration 后,我得到如下信息:
public partial class Initial : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Jobs",
c => new
{
id = c.Int(nullable: false, identity: true),
name = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => t.id);
// ....
}
}
但显然,dbo.Jobs 无法解析为 MSSQL 以外的任何其他表名。
如何在一个项目中对不同的数据库进行多次迁移?或者如果我不能,处理这种情况的最佳方法是什么?
【问题讨论】:
-
只要有一个名为“dbo”的模式,相当多的 RDBMS 将识别“dbo.jobs”。也许您的架构名称需要是动态的。也许您需要一个可靠地存在于每个可能的目标数据库上的所有者/模式。
标签: c# sql .net sql-server entity-framework