通用工作单元

2024-04-09

我已经实现了 EntityFramework 模式以及存储库和工作单元。实现类似于代码项目存储库示例 http://www.codeproject.com/Articles/770156/Understanding-Repository-and-Unit-of-Work-Pattern?msg=5295955#xx5295955xx,但是我需要对工作单元进行增强。

工作单位

public class GenericUnitOfWork : IDisposable
{
    // Initialization code

    public Dictionary<Type, object> repositories = new Dictionary<Type, object>();

    public IRepository<T> Repository<T>() where T : class
    {
        if (repositories.Keys.Contains(typeof(T)) == true)
        {
            return repositories[typeof(T)] as IRepository<T>
        }
        IRepository<T> repo = new Repository<T>(entities);
        repositories.Add(typeof(T), repo);
        return repo;
    }

    // other methods
}

上面的 UoW 是安静概括的,它始终以父 Repository 类为目标。我有另一个实体,例如学生,它有自己的存储库,扩展了存储库类。学生特定存储库有一个方法“GetStudentMarks()”。现在我无法使用通用工作单元类,因为它始终指向父存储库。

如何实现通用工作单元来处理这种情况?提前致谢。


通用工作单元!!! 您实施了错误的工作单元

请参阅此代码:

using System.Data.Entity;
using System;


namespace EF_Sample07.DataLayer.Context
{
 public interface IUnitOfWork
{
    IDbSet<TEntity> Set<TEntity>() where TEntity : class;
    int SaveChanges();
   }
 }

为什么使用工作单元?

Because:

  • 更好的性能
  • 并发问题
  • 交易的正确使用

参见示例:

Category

   public class Category
{
    public int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Title { get; set; }


    public virtual ICollection<Product> Products { get; set; }
}

Product

    public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }


    [ForeignKey("CategoryId")]
    public virtual Category Category { get; set; }
    public int CategoryId { get; set; }
}

工作单元

  public interface IUnitOfWork
{
    IDbSet<TEntity> Set<TEntity>() where TEntity : class;
    int SaveChanges();
}

数据库上下文

    public class Sample07Context : DbContext, IUnitOfWork
{
    public DbSet<Category> Categories { set; get; }
    public DbSet<Product> Products { set; get; }


    #region IUnitOfWork Members
    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }
    public int SaveAllChanges()
    {
        return base.SaveChanges();
    }
    #endregion
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用工作单元 的相关文章

随机推荐

  • 为什么有 2 种 AppFabric?

    我看到我们现在拥有 Windows Server AppFabric 和 Azure AppFabric 这只是 Microsoft 营销部门的命名空间冲突还是这些技术共享通用接口 有人告诉我 可以在本地生产服务器上使用 Azure App
  • 如何在 iOS 程序退出时关闭 UIManager 文档

    我有一个围绕全局 UIManagedDocument 核心数据 的 iOS 程序 我想知道如何确保它在程序退出之前正确保存和关闭 首先 如果我想确保在退出之前保存该文档 我应该 可以打电话吗 void closeWithCompletion
  • 如何在 socket.io python 服务器中获取连接客户端的会话 ID?

    我有这样的事情 from flask import Flask jsonify request render template Response from flask socketio import SocketIO emit app Fl
  • 如何将图例放在情节之外

    我有一系列 20 个图 不是子图 要在一个图中绘制 我希望图例是在盒子之外的 同时 我不想更改轴 因为图形的尺寸会减小 我想将图例框保留在绘图区域之外 我希望图例位于绘图区域右侧的外部 有没有办法减小图例框内文本的字体大小 从而使图例框的尺
  • Sequelize 创建具有关联的对象

    我正在尝试保存续集模型及其关联 所有关联都是一对一的 从数据库中检索具有关联的模型效果很好 但插入它们是另一回事 而且文档只会让我更加困惑 这是我的插入方法 models radcheck create user include model
  • 将csv文件导入access的VBA程序

    我需要 VBA 中的程序将数据从 csv excel 文件导入到 access 而不需要一些记录 如页眉和页脚 例如 我在 csv 文件中有一个表 其中包含一些 不属于表日期的句子 A1 这是一些句子标题 A2标题A3 A7 数据数据数据数
  • Azure VM的公共静态IP [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有什么方法可以赋值Azure VM 的公共静态 IP 我是否必须通过 Azure 虚拟网络进行操作
  • 如何使用 Tailwindcss 创建真正的粘性页眉/页脚(即使滚动也粘在底部)?

    很多博客和帖子声称使用 Tailwindcss 创建 粘性页脚 但我找不到thought关于内容超过简短的 hello world 行的情况 例如在none在这些示例中 如果主区域足够高可以滚动 则页脚会 粘住 https www goma
  • 用于分配视口元参数的脚本,iPhone / iPad 难题

    我正在使用 JavaScript 片段根据浏览器窗口的宽度设置视口元标记的内容参数 该脚本几乎完成了它应该做的事情 它将任何大屏幕设备的初始比例值设置为 1 将纵向模式下的 iPad 设置为 0 5 并将任何屏幕宽度小于 700px 的设备
  • numpy 广播如何执行得更快?

    在下面的问题中 https stackoverflow com a 40056135 5714445 https stackoverflow com a 40056135 5714445 Numpy 的广播提供了一种解决方案 其速度几乎比使
  • 使用支持 bean 的单个属性绑定两个 JSF 输入字段

    假设我有两个h inputText成分 我想将两个文本字段绑定到支持 bean 中的单个属性 问题是提交给支持 bean 的值是来自第二个文本字段的值 我希望该值应该从用户输入文本的字段提交 My code
  • 向特定联系号码发送 Whatsapp 消息(Swift 项目)

    我正在尝试向存储在全局变量中的收件人号码发送 Whatsapp 消息 通过使用这个简单的代码 let whatsAppUrl NSURL string whatsapp globalPhone if UIApplication shared
  • comonad 的简洁总结。 (其中 monad 是“不纯计算的类型”)

    就简洁的总结而言 这种对 Monad 的描述似乎胜出 https stackoverflow com questions 2488646 why are side effects modeled as monads in haskell 将
  • 通过扩展名限制可选文件[重复]

    这个问题在这里已经有答案了 如何通过扩展名限制可以使用 input type file 元素选择的文件 我已经知道接受属性 但在 chrome 中 它确实通过定义的最后一个 MIME 类型 在本例中为 gif 来限制文件 而 FF4 甚至不
  • 为什么需要EventSourcingHandler(在聚合对象中)?

    公平警告 我不知道我在做什么 所以即使问这个问题也可能会出错 我想要更新一个简单对象 聚合 的状态 然后向 UI 提供已更改对象的投影 这是我的聚合对象 命令处理程序存在 但此处未显示 Aggregate public class Widg
  • 具有二进制正文的 iOS swift post 请求

    我想从 iOS swift3 发出一个 POST 请求 该请求传递一大块原始字节作为正文 我做了一些实验 这让我认为以下方法有效 let url URL string https bla foo bar var request URLReq
  • 构建 LLVM 失败并显示空错误消息

    我正在尝试构建 LLVM 3 1 和 Clang 3 1 我遵循了入门指南铿锵的网站 http clang llvm org get started html 检查必要位置的存储库 获取 Python 等 如果我安装了 Python 3 3
  • Keras 文本预处理 - 将 Tokenizer 对象保存到文件中以进行评分

    我按照以下步骤 大致 使用 Keras 库训练了一个情感分类器模型 使用 Tokenizer 对象 类将文本语料库转换为序列 使用 model fit 方法构建模型 评估这个模型 现在 为了使用此模型进行评分 我可以将模型保存到文件中并从文
  • std::function 的运行时实现

    为了安全起见 我已经在 DLL 调用中使用旧式函数指针 如下所示 DLL typedef int stdcall ty void test ty t if t int r t 而我可以使用这个 void test std function
  • 通用工作单元

    我已经实现了 EntityFramework 模式以及存储库和工作单元 实现类似于代码项目存储库示例 http www codeproject com Articles 770156 Understanding Repository and