代码之家  ›  专栏  ›  技术社区  ›  Karan

WebAPI-具有DbContext对象创建的存储库类

  •  1
  • Karan  · 技术社区  · 7 年前

    我是ASP.NET WebAPI项目的新手,正在使用以下结构构建新项目:-

    Project.MainAPIService
    Project.BusinessManager
    Project.Model
    Project.Repository
    Project.Common
    

    API controller   >>>>>> (DI) Business Manager >>>> (DI) Repository & creates the DBContext object manually.
    

    我的存储库类是这样的。现在我想动态地将客户机名称传递到Repository类中,这样它就只与特定的客户机DB建立DB连接。但我无法将客户机名称从businessManager项目传递到PDLRepository,并进一步传递到DBContext类。

    public class MyRepository : IMyRepository, IDisposable
        {
            myContext _context = new myContext("ClientX");
    
            private IGenericRepository<Mapping> _docMappingGenericRepo;
            private IGenericRepository<Document> _DocGenericRepo;
            private IGenericRepository<Activity> _activityGenericRepo;
        }
    

     public partial class mycontext : DbContext
        {
            public mycontext (string ClientName)
                : base(ConnectionUtil.GetConnectionString(ClientName))
            { }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                Database.SetInitializer<myContext>(null);
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
    
            public virtual DbSet<DocumentMapping> DocumentMapping { get; set; }
    
            public virtual DbSet<Document> Document { get; set; }
       }
    

    请建议您如何相应地修复myContext或MyRepository类。如何将客户机名称从BusinessManager传递到Repository到DBContext类?

    请帮帮我。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Amit Joshi    7 年前

    不创建 myContext

    myContext _context = new myContext("ClientX");
    

    相反,创建和管理 myContext公司 在里面 BusinessManager . 作为 业务经理 ClientName ,可以使用从存储库中删除的同一行代码轻松地在那里创建它。

    现在,注射 myContext公司

    显然你有多个数据库;每个客户一个。所以一个数据库代表一个客户机。连接表示数据库和 myContext公司 正在处理连接。所以,我上面提到的方法更有意义。

    myContext公司 这将帮助您在一个事务/UoW下覆盖所有这些存储库。

    This

    推荐文章