在多个存储库中使用相同的 DbContext 是否明智?

2024-03-06

更深入地了解实体框架和存储库,以便更好地进行测试。想知道这是否明智?

public interface IRepository
{
    int SaveChanges();

    void Dispose();
}

using (MyContext context = new MyContext())
{
    TransactionRepository txns = new TransactionRepository(context); // TransactionRepository implement IRepository
    MappingRepository maps = new MappingRepository(context); // MappingRepositoryimplement IRepository

    SomeCommand command = new SomeCommand(txns, maps);
    command.Execute();
}

每个存储库在逻辑上都是不同的,因此理论上可能位于不同的数据源中。目前,他们使用相同的数据库。每个存储库类都实现 IRepository,特别是 SaveChanges() 以及一些查询方法,为了简洁起见,我没有展示这些方法。

使用多个存储库的良好做法是什么?


+1 大猩猩,取得一些商品积分。我想补充以下想法。

在 web/mvc 场景中,我使用了数十个存储库并将上下文注入到这些存储库中。我使用存储库基类。 我还有在构造函数中使用上下文的 UoW 类。 工作单元类包含对上下文所有支持的存储库的引用。我还使用有界上下文。以下是 Julie Lerman 关于该主题的博客示例。http://www.goodreads.com/author/show/1892325.Julia_Lerman/blog http://www.goodreads.com/author/show/1892325.Julia_Lerman/blog

所以,是的,使用多个上下文和多个存储库是非常有意义的。 您甚至可能有多个工作单元类,尽管并发使用工作单元类是另一个讨论。

根据要求添加示例代码: 此示例是从 LuW 基类继承的几个 LuW 类之一。 注入当前状态和要使用的 DBContext。 (或默认) 存储库是 CORE 项目的接口。 LuW 类位于 DAL 项目中。

基本的 LuW 是这样的......

public interface ILuw : ILuwEvent, IDisposable
  {

   IBosCurrentState CurrentState{ get; set; }
   OperationStatus Commit();

   }

Luw 类本身。

namespace XYZ.DAL
{
public class LuwBosMaster : Luw, ILuwBosMaster
{
    public LuwBosMaster(DbContext context, IBosCurrentState currentState)  
    {
       base.Initialise(context,currentState); 
    }
    public LuwBosMaster()
    {

        base.Initialise(GetDefaultContext(), BosGlobal.BGA.IBosCurrentState);
    }
    public static DbContextBosMaster GetDefaultContext()
    {
     return new DbContextBosMaster("BosMaster");
    }

    //MasterUser with own Repository Class
    private IRepositoryMasterUser _repositoryMasterUser;
    public  IRepositoryMasterUser RepMasterUser
    { get { return _repositoryMasterUser ?? (_repositoryMasterUser = new RepositoryMasterUser(Context, CurrentState)); } }

    //20 other repositories declared adn available within this Luw
    // Some repositories might address several tables other single tables only.
    //  The repositories are based on a base class that common generic behavior for each MODEL object

我相信你已经明白了基本的想法......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个存储库中使用相同的 DbContext 是否明智? 的相关文章

随机推荐

  • Vue Axios 动态 URL

    我想在 vue js 应用程序中动态创建 axios post 操作的 URL 路径 这是动作 editProduct function dispatch commit payload axios put http localhost 80
  • 如何删除单个链表中的循环?

    我不确定在不使用 O N 内存和标志的情况下如何找到循环的开始 找到循环内部的一个节点 具体参见1800 INFORMATION的回答 我们称这个节点为C 通过将指针从 C 前进直到再次到达 C 来求出循环的长度 循环的长度是它所采取的步数
  • 如何在方案中编写程序来查找数字列表的因数

    这是单个整数的代码 它如何扩展到函数列表 define factors n define factors d cond gt d n list modulo n d 0 cons d factors d 1 else factors d 1
  • Java日历的setMonth方法工作错误吗?

    我有如下的小代码 我预计结果应该是7 但它打印了6 如果我取消注释该行tmp get Calendar MONTH 它运行正常 打印7 请告诉我原因 我在 MacOS 中使用 JDK 1 7 0 25 public static void
  • 安装 scrapy 清理失败

    我一直在努力得到Scrapy使用 pip 安装 以便抓取 NBA 赛季的赛程表和得分 在过去的 6 个小时里 我一直在努力尝试安装它 我已经逐字按照设置说明进行操作 但仍然无法使其正常工作 任何帮助将不胜感激 终端窗口输出如下 非常感谢 顺
  • Keycloak 重定向 URI 正在将端口 0 添加到 url

    在keycloak 中遇到redirect uri 错误 发现 JIRA 记录了相同的问题KEYCLOAK 7237 https issues jboss org browse KEYCLOAK 7237 只是想检查一下是否有解决办法 有人
  • AngularJS:是否可以使控制器中的特定表单输入字段无效?

    我有一个地址文本输入字段 每当输入地址并单击输入字段旁边的搜索按钮时 我都会对地址进行地理编码 并将输入文本替换为地理编码器的结果 我还设置了一个范围变量 addressOk 是否可以根据以下内容使该特定表单输入字段无效 scope add
  • 将原始 JSON 加载到 Pig 中

    我有一个文件 其中每一行都是一个 JSON 对象 实际上 它是 stackoverflow 的转储 我想尽可能轻松地将其加载到 Apache Pig 中 但我无法弄清楚如何告诉 Pig 输入格式是什么 这是一个条目的示例 id oid 50
  • 为什么 C 提供的整数类型对于基本上任何项目来说都不够好?

    我更像是一名系统管理员而不是程序员 但我确实花费了大量的时间研究程序员的代码 试图找出问题所在 以及数量令人不安的that当程序员期望 u ll int32 t 或其他任何定义 是的 我知道这不是真的 但要么期望定义该类型的文件位于其他地方
  • 记录 CMake 脚本

    我发现自己处于一种情况 我想准确记录大量自定义 CMake 宏和函数 并且想知道如何做到这一点 首先想到的是简单地使用内置语法并且仅使用文档脚本 如下所示 FUNCTION NAME MACRO NAME description 这可以 但
  • 从适配器调用片段方法

    我需要在适配器中调用 Fragment 方法 但出现错误 ClassCastException Main MainActivity 无法转换为 PlayPauseClick Interface 我在我的片段中实现了我的界面 但我仍然收到此错
  • 每行字符数和每个文本区域的行数限制

    我正在尝试在 php 页面中创建一个多行文本区域 并且我想验证用户是否无法每行插入超过 50 个字符或超过 50 行 这个想法是 用户可以从电子表格中粘贴某些内容 但如果一行超过 50 个字符 则其余字符将被丢弃 并且不会插入到下一行中 这
  • 如何以编程方式检测位图是否具有 Alpha 通道?

    作为主题 最好使用C代码 MFC 版本 private static Boolean gc BitmapHasAlpha BitmapData gc bmpData if bmpData gt PixelFormat PixelFormat
  • Sitecore 文件夹和 IIS 权限

    设置或移动 Sitecore 解决方案时 您必须记住设置正确的文件夹权限和 IIS 权限 它类似于此处的第 3 3 3 2 3 3 3 9 节 http sdn sitecore net Products Sitecore 20V5 Sit
  • 存储一些大文本时哪个更好:XML资源文件中的字符串或类中的java字符串

    我必须存储一些长文本 以便在文本视图中使用 我一直在 xml 文件中使用字符串 但我不知道每个文本的 java 字符串是否会更好 所以 这是存储它们的最佳方式 在 XML 资源文件中创建字符串 创建一个类并将文本存储在java字符串中 Th
  • 在java中生成随机数列表

    我生成一个随机数 0 或 1 int randomColor Math random lt 0 5 0 1 我需要创建 52 个随机数 其中 26 个为 0 26 个为 1 您可以这样做 创建一个List共 52 个号码 用 26 个零和
  • 使用 sbt 从代码启动 scala repl 循环

    我正在尝试启动 scala repl 循环 使用breakif 并且正在从 SBT 构建 运行 并且我尝试遵循常见问题解答中的建议 但无法使其正常工作 有人可以给出一个用于配置设置的 MyType 示例吗 MyType 是一个代表性类 应包
  • 创建没有管理员访问权限的 venv python

    当我运行 python 时 m venv pathtomyvenv Error Command C Users user manageSQL Scripts python exe Im ensurepip upgrade default p
  • 服务器使用服务器端作为 servlet 发送事件

    我有一个使用 servlet 的简单服务器发送事件的运行实现 protected void doGet HttpServletRequest request HttpServletResponse response throws Servl
  • 在多个存储库中使用相同的 DbContext 是否明智?

    更深入地了解实体框架和存储库 以便更好地进行测试 想知道这是否明智 public interface IRepository int SaveChanges void Dispose using MyContext context new