如何设置内存存储库

2024-01-12

我有以下课程:

public class InMemoryRepository : IRepository
{
    public void Add(object entity)
    {
        throw new NotImplementedException();
    }

    public void Attach(object Entity)
    {
        throw new NotImplementedException();
    }

    public T Get<T>(object id)
    {
        throw new NotImplementedException();
    }

    public IList<T> GetAll<T>(string queryName)
    {
        throw new NotImplementedException();
    }

    public IList<T> GetAll<T>()
    {
        throw new NotImplementedException();
    }

    public IQueryable<T> Query<T>()
    {
        throw new NotImplementedException();
    }

    public void Remove(object entity)
    {
        throw new NotImplementedException();
    }

    public void Save(object entity)
    {
        throw new NotImplementedException();
    }
}

我们的默认存储库实现使用 NHibernate 作为后备存储,但我想实现它的内存版本,这样我就可以对域对象进行原型设计,而无需创建后备 SQL 数据库。假设所有对象都有一个 Id 属性作为主键,您将如何为此实现通用内存存储?

我很难解决一些关键点:

  • 存储库方法本身是通用的,因此我需要某种机制来自动存储和引用不同类型。Get<TestEntity>(object id)应该能够查询 TestEntity 的所有存储实例并找到具有匹配 Id 属性的实例,但我无法直接定义 TestEntity 对象的集合,因为存储库直到运行时才知道我要为其提供什么类型。
  • 我需要支持 LINQ to Objects 的 Query() 方法。假设我可以想出一种存储对象的好方法,这应该像返回存储对象的数组 AsQueryable() 一样简单。

您将如何存储对象来满足上述要求?


基础知识很简单:

public class InMemoryRepository : IRepository
{
    private readonly IList<object> entities = new List<object>();

    public T Get<T>(object id)
    {
        return entities.OfType<T>.SingleOrDefault(e => e.ID == id);
    }

    public IList<T> GetAll<T>()
    {
        return entities.OfType<T>.ToList();
    }

    public IQueryable<T> Query<T>()
    {
        return GetAll<T>.AsQueryable();
    }
}

然而,一旦涉及到public IList<T> GetAll<T>(string queryName),事情变得复杂了。

您可能可以使用基于 SQLite 的存储库实现来进行测试。

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

如何设置内存存储库 的相关文章

随机推荐

  • php echo 输出顺序变化

    希望这是一个简单的修复 出于某种原因 当我运行它时 我正在运行 WordPress 并使用高级自定义字段插件 echo Tickets Start at CA the field price 我得到这个输出 50Tickets Start
  • Caffe 中的批处理模式 - 没有性能提升

    继这个线程 https stackoverflow com q 32504394 1103412我重新实现了图像处理代码 以便一次发送 10 张图像 即我现在将输入 blob 的 num 属性设置为 100 而不是 10 然而 处理这批货所
  • Pandas:如果关键字出现在任何列中,则选择行

    我知道有一个关于在一列中搜索字符串的相关线程 here https stackoverflow com questions 27975069 how to filter rows containing a string pattern fr
  • Tensorflow:无法创建会话

    当我运行我的代码时出现错误 错误是 tensorflow python framework errors impl InternalError 无法创建会话 这是我的代码 coding utf 8 import import checkpo
  • 如何放松到 SwiftUI 中的 MainView

    我找不到从 ViewB 转到 ContentView 而不显示第二个的方法NavigationView在另一个之上NavigationView struct ContentView View var body some View Navig
  • 数据表中的 masterCheckbox

    我正在尝试将 masterCheckbox 添加到 webix 数据表项目中 现在 我得到以下行为 当我单击主复选框时 值重写为 1 或 0 id title checkValue on uncheckValue off template
  • 如何在 Node Express 应用程序中传递对象?

    我正在使用express和node postgres构建一个节点应用程序 https github com brianc node postgres https github com brianc node postgres 我只想构建一次
  • 如何使用订阅者选项?

    我现在开始使用 Pubsubhubbub 以及所有关于实时的东西 但我在使用订阅者选项时遇到了问题 我正在尝试用 PHP 开发一个网络应用程序 订阅 RSS 之前发布的 到 Hub http pubsubhubbub appspot com
  • object() == object() 保证为 False 吗?

    假设我创建了两个类的实例object 这两个实例是否保证彼此不相等 换句话说 就是object object 保证是False 还是依赖于实现 我明白那个object is object 保证是False 但我在这里问的是object ob
  • K-means 仅使用特定数据帧列与 scikit-learn

    我正在使用k means算法从scikit learn库 我想要聚类的值位于具有 3 列的 pandas 数据框中 ID value 1 and value 2 我想使用以下方法对信息进行聚类value 1 and value 2 但我也想
  • 如何在 16 位 x86 实模式下通过 BIOS 访问 USB 端口?

    我是装配世界的新手 我正在尝试编写一些汇编代码来与串行 并行 VGA 键盘等硬件设备进行通信 我在 x86 intel 处理器的实模式下执行此操作 通过从我亲自编写的用于加载汇编代码的 boostrap 启动我的代码 嗯 根据我从阅读教程中
  • std::string::c_str 和 std::string::data 之间有什么区别? [复制]

    这个问题在这里已经有答案了 为什么我想打电话std string data http www cppreference com wiki string data over std string c str http www cpprefer
  • 在 OS X 中安装 Mono Framework 的正确方法

    在已经安装了旧版本 例如 2 10 4 的情况下 是否有正确的方法来安装新版本的 Mono 例如 2 10 5 可以遵循哪条路 卸载旧版本 然后安装新版本 用新版本覆盖旧版本 先感谢您 只需安装即可 不用担心 框架支持多个版本 您最终将获得
  • React JS 在另一个组件中引用函数

    我试图获取通过另一个组件呈现的按钮来引用和 或影响不同组件的状态 var Inputs React createClass getInitialState function return count 1 add function this
  • 将 Facebook 登录添加到 ionic 应用程序

    我也是 Angular 和 Ionic 的新手 尝试了以下教程 https www sitepoint com how to integrate facebook login into a cordova based app https w
  • 调用静态方法的实例

    再会 我有点困惑 我想使用日历 所以我在互联网上搜索它并遇到以下代码 Ca1endar c Calendar getlnstance c set 2011 2 5 1 25 但我了解到这是一个静态方法 Calendar getlnstanc
  • NPOI 数据格式

    我正在使用 NPOI v1 2 3 导出网格 但在使单元格格式正常工作时遇到问题 我有一个类将对象列表导出到 XLS 文件 为每个对象创建一行 并为每个配置的属性添加一个单元格 可以在每个属性级别设置单元格数据格式 我读过您不应该为每个单元
  • Clojure 环包装重新加载不起作用

    这是我的 core clj 文件 ns lein app core require compojure core refer all compojure route as route ring middleware reload refer
  • 在 mac osx leopard/snow leopard 中获取鼠标光标下的文本

    有什么想法可以让文本位于鼠标光标下吗 我正在尝试构建一个字典应用程序 当鼠标悬停在单词上时会弹出一个翻译面板 我查看了可访问性API 它只能找到当前的ui元素 但不能找到当前的单词 我最后的选择是经常截图 然后进行ocr 这会消耗CPU 我
  • 如何设置内存存储库

    我有以下课程 public class InMemoryRepository IRepository public void Add object entity throw new NotImplementedException publi