Asp.net mvc 如何使用多数据库连接和存储库模式
我有一个带有EF和存储库模式的c#项目 对于单个数据库,一切正常,但我有不同的模型,与不同的数据库相关,如Asp.net mvc 如何使用多数据库连接和存储库模式,asp.net-mvc,entity-framework-6,repository-pattern,Asp.net Mvc,Entity Framework 6,Repository Pattern,我有一个带有EF和存储库模式的c#项目 对于单个数据库,一切正常,但我有不同的模型,与不同的数据库相关,如用户模型数据来自控制面板数据库,其他模型也来自不同的数据库 在这里,我对项目使用公共存储库模式。现在,在初始化模型时,如何将数据库连接字符串发送到存储库 以下是我的存储库模式: public class Repository<C,T> : IRepository<T> where T : class where C : DbContext, new() {
用户
模型数据来自控制面板数据库,其他模型也来自不同的数据库
在这里,我对项目使用公共存储库模式。现在,在初始化模型时,如何将数据库连接字符串发送到存储库
以下是我的存储库模式:
public class Repository<C,T> : IRepository<T> where T : class where C : DbContext, new()
{
private C _context = new C();
public C context
{
get
{
//if (_context == null)
//{
// _context = new C();
// _context.Database.Connection.ConnectionString = "the new connectionstring";
//}
//return dataContext;
return _context;
}
set { _context = value; }
}
private IDbSet<T> _entities;
private IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = context.Set<T>();
return _entities;
}
}
我在这里找不到连接线
DyeingContext d = new DyeingContext(DataBase.ControlPanal);
上面说
通过system.argumentexception类型的异常连接数据库
是否有方法将多个连接字符串传递到存储库
我应该如何以及在哪里初始化连接字符串,以及如何通过Repository传递连接字符串?我不确定您是否从上述评论中收到了答案。但我将如何实现这一点 1-为每个数据库创建一个dbContext具体类。两者都是从EF DbContext继承的 2-在配置文件中,为每个数据库创建连接字符串键。然后将该键作为ctr参数提供给每个dbContext类。详情如下:
public DB1Context()
: base("db1") // connection string key
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public DB2Context()
: base("db2") // connection string key
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
3-每个数据库必须有自己的存储库。例如,AccountRepository从基础存储库继承。其db上下文在constructor init上提供,如下所示
public class AccountRepository : DataRepositoryBase<Account>, IAccountRepository
{
private DB1Context db1Context = new DB1Context();
public AccountRepository()
{
this.DBContext = db1Context;
}
}
公共类AccountRepository:DataRepositoryBase,IAccountRepository
{
私有DB1Context DB1Context=新的DB1Context();
公共帐户存储库()
{
this.DBContext=db1Context;
}
}
这样,您可以通过多个数据库的存储库与多个数据库通信。同一个引擎/服务可以从不同的数据库注入存储库。通过查看异常消息,似乎
数据库.ControlPanal
值为null或空,这就是为什么会得到系统.argumentexception
。实际上,我无法存储连接字符串。我不知道如何将不同的连接字符串传递到存储库,以及何时应该初始化连接并将其存储到db contextShow us theDataBase.ControlPanal
codeDatabase.ControlPanel只需给我数据库名称。公共类数据库{public static string SCM=“SCM”;public static string ControlPanal=“ControlPanal”;//数据库名称}当初始化DyingContext类时,我在构造函数中创建连接字符串,并将其基于db上下文。DbContext
不会通过连接字符串名称接收数据库名称。如果您的连接字符串键是MyConnectionStringKey
,那么您的数据库.ControlPanal
应该返回如下字符串name=MyConnectionStringKey
谢谢大家,我得到了答案。我按工作单元解决了我的问题,工作单元将上下文发送到我的存储库,它就解决了我的问题。谢谢你们两个
public DB1Context()
: base("db1") // connection string key
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public DB2Context()
: base("db2") // connection string key
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public class AccountRepository : DataRepositoryBase<Account>, IAccountRepository
{
private DB1Context db1Context = new DB1Context();
public AccountRepository()
{
this.DBContext = db1Context;
}
}