cli*_*uke 26 .net entity-framework
我正在编写一个与预先存在的系统集成的工资单系统.原始系统有一个处理用户管理和一些全局配置的主数据库,下面有多个数据库,每个数据库在结构上相同,基本上每个数据库都是一个公司工资单数据库,所有这些数据库都绑定到主数据库,因为它属于父数据库公司拥有许多子公司,每个子公司都有自己的人力资
我想知道的是,如果有任何方法可以,基于cookie或其他方法存储他们希望连接的公司,使用过滤器根据输入动态更改实体框架目标数据库?
这是一个例子:
用户A登录到站点,页面加载用户有权访问的可用公司,用户将选择公司,他们在该公司拥有管理员权限,他们添加员工,在该操作运行之前,asp.net将连接字符串切换到适当的数据库,然后添加记录.
小智 25
这很简单.我有:
public WMSEntities() : base("name=WMSEntities") //WMSEntities is conection string name in web.config also the name of Entitiframework
{
}
Run Code Online (Sandbox Code Playgroud)
已经在自动生成的edmx文件夹的Model.Context.cs中
为了在运行时连接到多个数据库,我创建了另一个构造函数,它在同一个文件Model.Context.cs中将连接字符串作为参数如下所示
public WMSEntities(string connStringName)
: base("name=" + connStringName)
{
}
Run Code Online (Sandbox Code Playgroud)
现在我在Web.Config中添加了其他连接字符串
<add name="WMSEntities31" connectionString="data source=TESTDBSERVER_NAME;initial catalog=TESTDB;userid=TestUser;password=TestUserPW/>
<add name="WMSEntities" connectionString="data source=TESTDBSERVER_NAME12;initial catalog=TESTDB12;userid=TestUser12;password=TestUserPW12/>
Run Code Online (Sandbox Code Playgroud)
然后,当连接到数据库时,我调用下面的方法传递connetionString名称作为参数
public static List<v_POVendor> GetPOVendorList(string connectionStringName)
{
using (WMSEntities db = new WMSEntities(connectionStringName))
{
vendorList = db.v_POVendor.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
EF6更好地支持来自Same上下文的多个DB访问.这是EF5的一个片段.之前管理数据库初始化程序设置很重要.您可能不想触发任何迁移.即,之前使用它
Database.SetInitializer(new ContextInitializerNone<MyDbContext>());
但要回答这个问题:是的,你可以
var conn = GetSqlConn4DbName(dataSource,dbName );
var ctx = new MyDbContext(conn,true);
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;
}
public class ContextInitializerNone<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
{
public void InitializeDatabase(TContext context) { }
}
Run Code Online (Sandbox Code Playgroud)
另请参阅使用迁移,示例代码和动态数据库连接的StackOverflow应答
| 归档时间: |
|
| 查看次数: |
36987 次 |
| 最近记录: |