相关疑难解决方法(0)

上下文正在Code First模式中使用,其代码是从EDMX文件生成的

我正在开发一个使用EF 6数据库第一种方法的MVC 5应用程序.现在我希望我的DbContext基于不同的用户访问多个数据库.为此,我在Web.Config文件中生成了一个连接字符串:

string str = u.Users.Where(x => x.UserName == HttpContext.User.Identity.Name).First().ConnStr;
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");          
ConnectionStringSettings c = new ConnectionStringSettings();    
c.ConnectionString = str;
c.Name = u.Users.Where(x => x.ConnStr == str).First().DbName;
c.ProviderName = "System.Data.SqlClient";
section.ConnectionStrings.Add(c);
configuration.Save();
Run Code Online (Sandbox Code Playgroud)

配置文件中生成的连接字符串是:

<add name="Awais123" connectionString="Data Source=.;Initial Catalog=Awais123;integrated security=True;MultipleActiveResultSets=True"
      providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

我制作EDMX时由EF生成的连接字符串是:

<add name="ABCEntities" connectionString="metadata=res://*/Models.awais.csdl|res://*/Models.awais.ssdl|res://*/Models.awais.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Awais;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

然后我重载了我的Entities构造函数:

public ABCEntities(string nameorConnString) : base(nameorConnString) {}
Run Code Online (Sandbox Code Playgroud)

默认的构造函数是:

public ABCEntities() : base("name=ABCEntities") {}
Run Code Online (Sandbox Code Playgroud)

现在我在另一个.cs文件中声明另一个DbContext类来生成数据库:

public partial class NewDbGen : DbContext
{ …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc entity-framework ef-code-first ef-database-first

2
推荐指数
1
解决办法
6057
查看次数