Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Sql server 实体框架:具有相同架构的多个数据库_Sql Server_Entity Framework_Asp.net Web Api_Dbcontext_Multiple Databases - Fatal编程技术网

Sql server 实体框架:具有相同架构的多个数据库

Sql server 实体框架:具有相同架构的多个数据库,sql-server,entity-framework,asp.net-web-api,dbcontext,multiple-databases,Sql Server,Entity Framework,Asp.net Web Api,Dbcontext,Multiple Databases,我刚刚创建了一个ASP.NETMVC4和WebAPI项目。之后,我将.edmx数据源添加到项目中 我有多个具有相同模式的数据库。动态地,我想使用EF中提供的默认构造函数替换连接字符串 但在Model1.Designer.cs中,每当我收到类似“已声明具有相同签名的成员”这样的错误时 我无法解决这个问题 是的,它有效!您只需要更改连接字符串 为了满足我自己的好奇心,我刚刚对它进行了测试 以下是我采取的步骤: 获取现有数据库并为其创建模型 创建一个新的空数据库 在SQL Management S

我刚刚创建了一个ASP.NETMVC4和WebAPI项目。之后,我将
.edmx
数据源添加到项目中

我有多个具有相同模式的数据库。动态地,我想使用EF中提供的默认构造函数替换连接字符串

但在
Model1.Designer.cs
中,每当我收到类似“已声明具有相同签名的成员”这样的错误时


我无法解决这个问题

是的,它有效!您只需要更改连接字符串

为了满足我自己的好奇心,我刚刚对它进行了测试

以下是我采取的步骤:

  • 获取现有数据库并为其创建模型

  • 创建一个新的空数据库

  • 在SQL Management Studio中右键单击第一个数据库->任务->导出数据。将其所有数据导出到新创建的数据库

  • 从第二个数据库中删除一些记录

  • 编写以下代码:

    TMS_MiscEntities db = new TMS_MiscEntities();
    TMS_MiscEntities dbCopy = new TMS_MiscEntities();
    dbCopy.Database.Connection.ConnectionString = db.Database.Connection.ConnectionString.Replace("initial catalog=TMS_Misc", "initial catalog=TMS_Misc_new");
    
    Response.Write(string.Format("DB 1 records: {0}<br/>", db.ZipCodes.Count()));
    Response.Write(string.Format("DB 2 records: {0}<br/>", dbCopy.ZipCodes.Count()));
    
  • 得出这样的结论:)

  • 以下是我的连接字符串的外观:

    <add name="TMS_MiscEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ws2008;initial catalog=TMS_Misc;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    我正在使用实体框架6.1.3。我已经向DbContext添加了一个构造函数,该构造函数接受一个字符串参数。此字符串可以是存储在App.config中的连接名称,也可以是完整连接字符串。大概是这样的:

    public partial class MyDBContext : DbContext
    {
        public MyDBContext(string connectionString)
            : base(connectionString)
        {
        }
    
       // DbSets, OnModelCreating, etc 
    }
    
    在我的例子中,我管理一个多租户应用程序,并使用ContextFactory构建正确的连接字符串并返回初始化的上下文

    public class ContextFactory
    {
        public MyDbContext GetContext()
        {
            string connectionString;
            // do some stuff here
            return new MyDbContext(connectionString);
        }
    }
    

    VS不会生成一个包含字符串参数的构造函数的上下文吗?明天我肯定会测试它。如果它不起作用,我会让你知道我的情况。。。。谢谢你的回复。不工作。我用的是EF6。dbCopy.Database.Connection.ConnectionString。。。。。我无法解析。数据库。它显示了错误。什么错误?另外,您确定数据库模式实际上是相同的吗?你能试着将现有数据库导出到新创建的数据库吗?我明白了。该错误似乎与使用多个数据库无关。只是EF。
    public class ContextFactory
    {
        public MyDbContext GetContext()
        {
            string connectionString;
            // do some stuff here
            return new MyDbContext(connectionString);
        }
    }