entity-framework - WebAPI - 具有 DbContext 对象创建的存储库类
问题描述
我是 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 类,以便它只与特定客户端数据库建立数据库连接。但我无法将客户端名称从 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 类?
请帮帮我。
解决方案
不要myContext
在存储库中创建。从存储库中删除以下行。
myContext _context = new myContext("ClientX");
相反,myContext
在BusinessManager
. 正如BusinessManager
已经知道的那样ClientName
,可以使用我们从存储库中删除的同一行毫无问题地在那里创建它。
现在,注入myContext
存储库。
您显然有多个数据库;每个客户一个。所以一个数据库代表一个客户。Connection 代表数据库并且myContext
正在处理 Connection。所以,我上面提到的方法更有意义。
存储库执行操作,它不应该控制连接。使用这种方法,您还可以在一个中包含多个存储库,myContext
这将帮助您在一个事务/UoW 下涵盖所有这些存储库。
这个答案解释了如何用 Dapper 做到这一点。技术可能与您无关;但其余细节可能会对您有所帮助。
推荐阅读
- docker - 获取容器指标 cpu 负载
- java - 如何使用 Spring Boot Batch Job 更新数据库中的大量数据
- amazon-web-services - Ansible ec2_vpc_route_table 剧本错误是:“dict object”没有属性子网
- xml - Blogger 标题链接通过 XML 导入
- java - 如何更改 Spark SQL(在 java 中)DataFrame 中的列类型?
- android - React Native:如何避免随着时间的推移在不同的本地环境中构建错误
- java - android.support.v4.widget.DrawerLayout 无法实例化 - 实现的损坏的类路径
- css - 如何使用 CSS 为选中的复选框选择标签?
- reactjs - 如何在映射的选择菜单项中显示选定的值
- android - 如何在 Android 项目中 gitignore 特定的 Java 文件或任何文件夹或任何 XML 文件?