Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同的服务器上同时创建具有相同结构的数据库_C#_.net_Database_Entity Framework_Database Design - Fatal编程技术网

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

C# 在不同的服务器上同时创建具有相同结构的数据库,c#,.net,database,entity-framework,database-design,C#,.net,Database,Entity Framework,Database Design,我试着用谷歌搜索,然后在stackoverflow上搜索一些已经回答过的问题,但没有成功 我需要几个结构相同的数据库(例如MySQL、MSSQL、Firebird)。如何同时创建具有相同模式的数据库,这样就不会为每个模式浪费时间? 以及如何将它们映射到一个实体模型(使用一个*.edmx模型)?或者至少在模型之间共享生成的类型 我用C#开发p.S。提前谢谢 编辑1:我找到了这个问题,但没有答案我没有名声将此作为评论添加,但听起来像是一个有趣的挑战 只是一些想法 实体框架 我以前曾尝试使用EF4.0

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

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

我用C#开发p.S。提前谢谢


编辑1:我找到了这个问题,但没有答案

我没有名声将此作为评论添加,但听起来像是一个有趣的挑战

只是一些想法

实体框架 我以前曾尝试使用EF4.0(数据库优先)将两个数据库映射到一个EDMX,但不幸的是,所有的道路都让我创建了两个模型。每个数据库一个

数据库: 考虑到不同的数据库平台,是否值得为每个数据库考虑一个SQL脚本? 所以,在应用程序中包含一份脚本副本,并在启动时或需要时执行

这意味着采用数据库优先的方法,但如果db模式不变,它可能会起作用


IE创建数据库、创建用户、创建表等。。。。对于每种数据库类型。

如果要使上下文指向不同的数据库。那么你应该提供 连接信息且不使用App.config连接字符串

您的内容应该有一个允许连接信息的构造函数。 在那里,它仍然可以保持原来的方式

公共抽象类YOURDbContext:DbContext,IContextOptions{

    //ctors
    protected YOURDbContext(string connectionName)
        : base(connectionName) {
    }
    // YOU NEED THIS CONSTRUCTOR
    protected YOURDbContext(DbConnection dbConnection, bool contextOwnsConnection)
        : base(dbConnection, contextOwnsConnection) {
    }
thr上下文的每个实例都可以连接到不同的数据库。您一次有多个上下文

每个数据库类型都需要一个函数,以确保connectionInfo的构造正确

下面是一个为SQLServer获取数据库连接的示例。对其他提供程序重复此操作


不像你想象的那么简单。不同的数据库处理不同的事情。一件事情的数据类型在不同的数据库中可能会有所不同。我知道,但也许有一些工具可以帮助至少镜像数据库?镜像方式?如果你使用的数据类型只存在于一个数据库中,或者在另一个数据库中使用不同的数据类型,那么自动化的过程如何知道该怎么做如果您只使用最基本的数据类型(您正在使用的所有数据库都通用的数据类型),那么然后,您可以对所有数据库使用相同的数据库创建脚本。有许多常见类型,或与其他类型相对应的类型,并且查询可能不同。因此,我认为可能有一些工具可以在这些类型之间进行映射,并可以转换其他数据库的脚本文件。我不首先使用模型。但是部分上下文类应该公开他选择做这件事。
     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;
    }