Asp.net mvc 如何使用多数据库连接和存储库模式

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() {

我有一个带有EF和存储库模式的c#项目

对于单个数据库,一切正常,但我有不同的模型,与不同的数据库相关,如
用户
模型数据来自控制面板数据库,其他模型也来自不同的数据库

在这里,我对项目使用公共存储库模式。现在,在初始化模型时,如何将数据库连接字符串发送到存储库

以下是我的存储库模式:

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 the
DataBase.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;
        }
    }