![]() |
1
5
这个 存储库 该模式适用于标准CRUD应用程序。您需要对数据库中的单个表执行经典的创建、读取、更新和删除操作集。在这种情况下,您为每个表创建一个存储库,并允许读取操作具有额外的值,以便可以应用筛选。 在下一个级别上 工作单位 图案它们用于跨多个存储库并执行业务操作。因此,例如,您将从多个存储库读取值,执行计算,然后将更改写回多个存储。所有这些都将发生在事务中,因此您在数据库中始终具有一致的状态。 问题是当您有跨多个表的复杂查询时。在这种情况下,您可以将查询放置到作为查询中第一个表的存储库中 从…起 条款然后您需要为该存储库方法提供参数,以便根据需要对其进行参数化。 |
![]() |
2
3
在互联网上有很多存储库模式和工作单元的实现。其中一些非常简单,开发人员基本上自己手动为每个表实现自己的功能,有些是通用的,但不是高级的,有些非常酷,通用的,仍然可以为您提供适当的位置、投影等功能。 我认为良好实施的示例如下: https://genericunitofworkandrepositories.codeplex.com/ 它以界面所示的MVC为目标。我专注于WPF应用程序,所以我需要稍微调整一下。但这一工作单元的实施思路非常好。 这种实现方式有缺点。因为它依赖于一些高级LINQ和EF功能,所以可能会认为您的底层访问层正在感染存储库层和使用存储库的层。 问题是,例如,当您想要离开EF时,很可能需要更改存储库的界面。 要显示此库的强大功能,请使用一些代码片段来证明这一点:
或使用投影:
|
![]() |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
![]() |
Murat Güzel · EF存储库模式错误{'Id'}已被跟踪 3 年前 |
![]() |
dotnetdevcsharp · 减少基于数据类型获取设置的方法数量 3 年前 |
![]() |
saravanan049 · 在实体框架中回滚Azure SQL数据库 3 年前 |