【问题标题】:WebAPI - Repository class with DbContext object creationWebAPI - 具有 DbContext 对象创建的存储库类
【发布时间】:2018-08-17 10:37:44
【问题描述】:

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

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

我正在使用 Autofac 在整个项目中执行 DI。流程是这样的:-

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

我的 Repository 类看起来像这样。现在我想将客户端名称动态传递给 Repository 类,以便它只与特定客户端数据库建立数据库连接。但我无法将客户端名称从 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;
    }

mycontext 类如下所示:-

 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 类?

请帮帮我。

【问题讨论】:

    标签: entity-framework asp.net-web-api asp.net-web-api2 repository-pattern


    【解决方案1】:

    不要在存储库中创建myContext。从存储库中删除以下行。

    myContext _context = new myContext("ClientX");
    

    相反,在BusinessManager 中创建和管理myContext。由于BusinessManager 已经知道ClientName,因此可以使用我们从存储库中删除的同一行毫无问题地在那里创建它。

    现在,在 Repository 中注入 myContext

    您显然有多个数据库;每个客户一个。所以一个数据库代表一个客户。 Connection 代表数据库,myContext 正在处理 Connection。所以,我上面提到的方法更有意义。

    存储库执行操作,它不应该控制连接。使用这种方法,您还可以在一个 myContext 中包含多个存储库,这将帮助您在一个事务/UoW 下涵盖所有这些存储库。

    This 回答解释了如何使用 Dapper 来做到这一点。技术可能与您无关;但其他细节可能会对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多