【发布时间】:2014-03-11 09:44:50
【问题描述】:
我正在开发一个课程、部门、学生 MVC 应用程序,作为学习 MVC 的一部分。
我采用了多层设计,即 Web、BLL、DAL。
我的 DAL 有 DbContext 和许多存储库。例如。学生、部门、课程、搜索、审核...
接下来研究如何在 DAL 存储库之间共享 DbContext 导致我阅读了大量有关设计模式的内容,最后我学习了 Generic Repository 和 Unit of Work(并快速了解了 Dependency Injection)。
我很快就发现了 Generic Repositoy 和 UoW 的好处。这对于适合 CRUD 功能的 Student、Department、Course... 实体非常有用。我还没有编码。
但在使用通用存储库和 UoW 进行搜索和审核时,它不适合。背景:为什么在 Search 和 Audit 之间共享 DbContext?我想审核同一事务中的每个搜索。
所以我被卡住了!主要是因为搜索功能是只读的,没有提交。其次,搜索和审计实体都非常不同——彼此不同,而且不像 CRUD。因此,据我所知,通用存储库不适用于这两个实体。
有没有办法在两个非常不同的实体之间共享 DbContext,例如搜索和审核?
我能想到的最佳方法是将审核功能放入 Search DAL 存储库中。我不喜欢混合这两个实体,听起来有些难看,但我想我可以例外,因为它是审计功能。
【问题讨论】:
-
这个SO answer 可能会帮助你。
-
嗨,Max,感谢您的回答,但这并不能回答我的问题。就像许多其他存储库和 UoW 答案一样,它们迎合了坚持 CRUD 的实体。如上所述,我的搜索和审核实体与此类型非常不同。场景。
-
我提到的链接是关于试图帮助您回答您用粗体提出的问题有没有办法在两个非常不同的实体之间共享 DbContext。但我知道这个问题并没有总结你在这里倾倒的所有想法和担忧:-) 请记住,通用存储库不是灵丹妙药。您还应该问自己是否需要在完全相同的事务中进行搜索和审计,这意味着如果其中一个失败,所有工作单元都会回滚......
-
是的,关于通用存储库的好点,谢谢。我一直在这里质疑通用存储库的使用。
标签: asp.net-mvc entity-framework repository-pattern unit-of-work