我尝试谷歌,然后在stackoverflow上搜索了一些已经回答的问题,但没有成功。
我需要几个具有相同结构的数据库(例如MySQL,MSSQL,Firebird)。如何同时创建具有相同模式的数据库,所以我不会为每个模式浪费时间? 还有我如何将它们映射到一个实体模型(使用一个* .edmx模型)?或者至少在模型之间共享生成的类型?
P.S。我使用C#开发。提前谢谢!
修改1 :我发现了这个问题,但没有回答Using entity framework with both SQL Server and SQLite databases simultaneously
答案 0 :(得分:0)
我没有声誉将此添加为评论,但这听起来像是一个有趣的挑战,
只是一些想法。实体框架 我之前尝试使用EF4.0(数据库优先)将两个数据库映射到一个EDMX,但遗憾的是所有道路都让我创建了两个模型。每个数据库一个。
<强>数据库强>: 鉴于不同的数据库平台,是否值得考虑每个数据库的SQL脚本? 所以在你的应用程序中包含脚本的副本,并在启动时或在需要时执行。
这意味着数据库第一种方法,但如果db模式不变,它可能会起作用。
IE为每个数据库类型创建数据库,创建用户,创建表等....
答案 1 :(得分:0)
如果您有上下文指向不同的数据库。那你应该提供 连接信息,不使用App.config ConnectionStrings。
您的内容应该有一个允许CONNECTION信息的构造函数。 它仍然可以有旧的方式。
公共抽象类YOURDbContext:DbContext,IContextOptions {
//ctors
protected YOURDbContext(string connectionName)
: base(connectionName) {
}
// YOU NEED THIS CONSTRUCTOR
protected YOURDbContext(DbConnection dbConnection, bool contextOwnsConnection)
: base(dbConnection, contextOwnsConnection) {
}
thr上下文的每个实例都可以连接到不同的数据库。您一次有多个上下文。
您需要一个功能 PER数据库类型,以确保正确构造connectionInfo。
这是一个示例获取 SQLServer 的DBConnection。 为其他提供商重复。
public DbConnection GetSqlConn4DbName(string dataSource, string dbName) {
var sqlConnStringBuilder = new SqlConnectionStringBuilder();
sqlConnStringBuilder.DataSource = String.IsNullOrEmpty(dataSource) ? DefaultDataSource : dataSource;
sqlConnStringBuilder.IntegratedSecurity = true;
sqlConnStringBuilder.MultipleActiveResultSets = true;
var sqlConnFact = new SqlConnectionFactory(sqlConnStringBuilder.ConnectionString);
var sqlConn = sqlConnFact.CreateConnection(dbName);
return sqlConn;
}