EF4:如何使用通用存储库模式?

2024-02-24

我正在尝试通过使用可以子类化的通用存储库来简化现有的存储库。问题是我不知道如何编写一些基类方法。我目前有:

public interface IRepository<T> : IDisposable where T : class
{
    IQueryable<T> GetAll();
    T GetSingle(int id);
    T GetSingle(string slug);
    void Save(T entity);
}

public class HGRepository<T> : IRepository<T> where T : class
{
    protected HGEntities _siteDB;
    protected IObjectSet<T> _objectSet;

    public HGRepository(HGEntities context)
    {
        _siteDB = context;
        _objectSet = _siteDB.CreateObjectSet<T>();
    }

    public IQueryable<T> GetAll()
    {
        return _objectSet;
    }

    public T GetSingle(int id)
    {
        return null;
    }

    public T GetSingle(string slug)
    {
        return null;
    }

    public void Save(T entity)
    {
        // code to save entity
    }

    public void Dispose()
    {
        _siteDB = null;
    }
}

我的困惑在于我的GetSingle() and Save()方法。他们需要依赖于每种类型略有不同的信息T。我的非通用存储库的示例:

public Article GetArticle(int id)
{
    return _siteDB.Articles.SingleOrDefault(a => a.ArticleID == id);
}

public Article GetArticle(string slug)
{
    return _siteDB.Articles.SingleOrDefault(a => a.Slug == slug);
}

public void SaveArticle(Article article)
{
    if (article.ArticleID > 0)
    {
        _siteDB.ObjectStateManager.ChangeObjectState(article, System.Data.EntityState.Modified);
    }
    else
    {
        _siteDB.Articles.AddObject(article);
    }

    _siteDB.SaveChanges();
}

正如您所看到的,文章有自己的特定 ID。对于我的其他实体也是如此(例如,新闻项目有一个 NewsID 属性)。

如何制作一个可以协调为更具体版本的抽象基本方法?


你可以有一个通用的表达 http://msdn.microsoft.com/en-us/library/bb397951.aspx参数为你的GetSingle method:

public interface IRepository<T> : IDisposable where T : class
{
    ....
    T GetSingle(Expression<Func<T, bool>> filter);
    void Save(T entity);
}

and in HGRepository<T>:

public T GetSingle(Expression<Func<T, bool>> filter)
{
        return _objectSet.Where(filter).SingleOrDefault();
}

及用法:

IRepository<Article> rep = new HGRepository<Article>();
return rep.GetSingle(p => p.Slug == slug);

如果您有通用接口/存储库类未涵盖的特定场景,您可以创建从通用接口/类继承的新接口/类:

public interface IArticleRepository : IRepository<Article>
{
   ...
}

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

EF4:如何使用通用存储库模式? 的相关文章

随机推荐

  • 将结构与 std140 对齐,CPU 端

    我想这是纯 C 问题和 OpenGL 问题之间的一种交叉 我有一个统一的缓冲区 并在其中分配 sizeof ShaderData 字节的空间 我在着色器的 GPU 端使用 std140 布局 根据 std140 规则 我需要在结构中的各个位
  • 设置从 Eclipse 运行的 Java 程序的内存

    我正在从 Eclipse 运行一个需要大量内存的 Java 应用程序 我可以把放在哪里 Xmms罢工 gt xms flag 您可以为特定运行配置设置 VM 参数 运行 运行配置 参数选项卡 VM 参数 顺便说一句 你可能想尝试 Xms代替
  • Microsoft MPI 不运行

    我正在尝试 Microsoft 的 MPI 实现 我从这里安装了CCP sdk http www microsoft com en us download details aspx id 239 http www microsoft com
  • 使用 Xamarin Forms 共享图像

    我创建了一个 Xamarin Forms PCL 解决方案 目前专注于 Android 项目 我正在尝试使用依赖服务来实现图像共享 图像位于 Android 项目的可绘制文件夹中 但是 每次我运行下面的代码时 应用程序都会崩溃并显示 发生未
  • 嵌套列表理解/合并嵌套列表

    我在理解嵌套列表理解结构时遇到问题 我有一个清单 gt gt gt test 1 2 3 4 5 6 7 8 If I do t2 for x in test for y in x t2 append y 然后它返回 gt gt gt t2
  • 我们可以使用 Yolo 来检测和识别图像中的文本吗

    目前我正在使用一种名为 Yolov2 的深度学习模型进行对象检测 我想用它来提取文本并将其保存在磁盘中 但我不知道该怎么做 如果有人了解更多那个 请告诉我 我使用张量流 Thanks 如果您使用预训练模型 则需要保存这些输出并将图像输入到字
  • 如何删除R中单词之间的空格?

    我一直在尝试消除或替换单词之间的空格 而不影响其他空格 一个例子是 string lt Hi buddy 3 256 225 25 365 425 并希望它是 string lt Hibuddy 3 256 225 25 365 425 我
  • 在 C# 中创建泛型方法

    我正在尝试将一堆类似的方法组合成一个通用方法 我有几种方法可以返回查询字符串的值 如果该查询字符串不存在或格式不正确 则返回 null 如果所有类型本身都可为空 那么这将很容易 但我必须对整数和日期使用可为空的泛型类型 这就是我现在所拥有的
  • 行为测试框架的测试覆盖率工具

    我们正在使用 Behave BDD 工具来自动化 API 是否有任何工具可以使用我们的行为案例提供代码覆盖率 我们尝试使用覆盖模块 但它不适用于 Behave 您可以运行任何具有覆盖范围的模块来查看代码使用情况 在你的情况下应该接近cove
  • 使用匿名对象输出带有破折号的 JSON 属性名称

    我正在使用第三方 API 如下所示 它用Json serializer输出 public Output string name object value 我必须将以下 json 字符串放入 C 的输出文件中 Output somename
  • 为什么我的 Visual Studio Community 2019 在“调试”>“Windows”下没有“模块”选项以及如何修复它?

    正如标题所示 我在 调试 gt Windows 下看不到任何 模块 子菜单 并且快捷键 Ctrl Alt U 没有任何作用 刚刚通过安装程序恢复了 Visual Studio 什么也没有 我有 VS 2019 Community 版本 16
  • 将图像从 Assets 加载到 NSImage 不断出现错误,需要 NSImage.Name

    我正在尝试从以下位置加载文件xcassets to an NSImage 其中资产名称是 logo 我试过这个 let logoIcon NSImage named logo 但我不断收到此错误 无法将 String 类型的值转换为预期的参
  • xcode4 存档/ipa 问题[重复]

    这个问题在这里已经有答案了 可能的重复 Xcode 4 存档版本未指定 https stackoverflow com questions 5332115 xcode 4 archive version unspecified Hi 我正在
  • 在 QLabel 中隐藏或裁剪重叠文本?

    我目前正在构建一个 UI 其中有 3 个以水平布局排列的标签 textLabel valueLabel unitLabel The valueLabel and unitLabel右对齐 unitLabel有固定的宽度 valueLabel
  • 返回包含环回的连接表属性

    我有一个与 Loopback 上描述的数据结构非常相似的数据结构有很多通过 https docs strongloop com display public LB HasManyThrough relations文档页面 对于给定的医生 例
  • 在 RSpec 请求规范中使用 Capybara 时,设置自定义请求标头的最佳方法是什么?

    我正在用 set headers 方法对 Capybara Session 进行猴子修补 该方法分配给 Capybara RackTest Browser 的选项属性 我已将其从 attr reader 更改为 attr accessor
  • DART 隔离和线程之间的区别(Java、C#)

    对我来说 DART Isolate 看起来像一个具有不同术语的线程 Java C Isolate 与 Thread 在哪些方面不同 线程使用共享内存 而隔离则不使用 例如 以下伪代码在 Java C 中 class MyClass stat
  • 在 JavaScript 中将日期从一种格式转换为另一种格式

    我有一个 javascript 格式的日期字符串 格式为 1 我需要将其转换为格式 2 当一种格式是 dd mm yy 而另一种格式是 mm dd yy 时 问题就开始了 格式动态变化 我的格式为字符串 但我需要一个像 Date newDa
  • 在couchbase中编写reduce函数

    这是我第一次尝试沙发基地 我的 json 文档如下所示 member id 12345 devices device id 1 hashes h1 h2 h3 h4 device id 2 hashes h1 h2
  • EF4:如何使用通用存储库模式?

    我正在尝试通过使用可以子类化的通用存储库来简化现有的存储库 问题是我不知道如何编写一些基类方法 我目前有 public interface IRepository