同时在不同服务器上创建具有相同结构的数据

时间:2013-11-18 19:30:29

标签: c# .net database entity-framework database-design

我尝试谷歌,然后在stackoverflow上搜索了一些已经回答的问题,但没有成功。

我需要几个具有相同结构的数据库(例如MySQL,MSSQL,Firebird)。如何同时创建具有相同模式的数据库,所以我不会为每个模式浪费时间? 还有我如何将它们映射到一个实体模型(使用一个* .edmx模型)?或者至少在模型之间共享生成的类型?

P.S。我使用C#开发。提前谢谢!

修改1 :我发现了这个问题,但没有回答Using entity framework with both SQL Server and SQLite databases simultaneously

2 个答案:

答案 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;
    }