我刚刚创建了一个ASP.NET MVC 4& WebAPI项目。之后我将.edmx
数据源添加到项目中。
我有多个具有相同架构的数据库。动态地我想使用EF中提供的默认构造函数替换连接字符串。
但是在Model1.Designer.cs
中,每次我收到类似&#34的错误;具有相同签名的会员已经宣布"。
我无法解决这个问题。
答案 0 :(得分:2)
是的,它有效!您需要更改的是connection string
。
我刚试过它以满足自己的好奇心。
以下是我采取的步骤:
1.取一个existing database
和create a model
2.创建一个新的空数据库
3.在SQL Management Studio
中右键单击第一个数据库 - >任务 - > Export Data
。将所有数据导出到新创建的数据库中
4.从第二个数据库中删除一些记录
5.编写此代码:
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()));
6。检查结果:
DB 1 records: 869164
DB 2 records: 868709
7。得出结论它有效:)
这是我的连接字符串的外观:
<add name="TMS_MiscEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string="data source=ws2008;initial catalog=TMS_Misc;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
答案 1 :(得分:1)
我正在使用Entity Framework 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);
}
}