gpt4 book ai didi

nhibernate - 存储库/工作单元模式 - 如何在存储库中查询满足特定条件的对象?

转载 作者:行者123 更新时间:2023-12-04 17:12:45 25 4
gpt4 key购买 nike

我在 C# 中有一个标准的存储库接口(interface),其中包括以下方法:

IEnumerable<T> GetAll();
T GetById(int id);
void Delete(T entity);
void Add(T entity);

在我的域层,我实例化的只是一个新的工作单元包装器并将其传递给存储库。工作单元包装器类隐藏了我使用的是 NHibernate 还是 Entity Framework ,并公开了一个 Commit() 方法。

在我的领域层中,如何查询仅满足特定条件的对象?

我认为我目前正在做的事情非常低效。我目前正在这样做:
var results = myRepository.GetAll().Where......

如果我有大量对象,GetAll() 是否会在过滤掉我不需要的对象之前返回它们中的每一个?我怎样才能完全防止不需要的对象被退回?

显然我可以向接口(interface)添加更多方法,但这似乎与通过接口(interface)仅公开 CRUD 操作不一致。

即 - 我认为我不应该添加类似的东西(但也许我错了):
IList<T> GetAllWhereMeetsMyCriteria();

最佳答案

是的,您的 GetAll().Where会将所有对象从数据库拉到您的应用程序并执行 linq-to-objects。 @Kamyar 解决方案也会这样做。 @Dysaster 在我写这个答案时提供了一个正确的解决方案。

首先 - 你真的需要必须同时支持 NHibernate 或 EF 的存储库吗?是客户要求吗?如果不是,你就是在浪费资源。选择技术并创建应用程序遵循关注点分离所需的最小抽象。

如果您真的需要持久性 API 的高级抽象和绝对独立性,您应该使用家族中的第三种模式 - Specification pattern .使用自定义规范,如果您将规范描述的条件转换为数据源所需的操作,您将能够将持久性更改为任何内容。 NHibernate 中的 Criteria API 或 IQueryable 上的扩展方法是规范,但它们取决于技术。

关于nhibernate - 存储库/工作单元模式 - 如何在存储库中查询满足特定条件的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com