Sco*_*ord 23 .net entity-framework entity-framework-4.1
我正在使用EF 4.1 Code First布局一个新的数据层,从较旧的自制数据层迁移.
我已经设置了两个程序集,一个用于我的上下文,一个用于所有POCO代码的第一个类.
我有一些业务逻辑,例如,对一个表(或几个表)的查询,这些表在几个不同的地方使用. 我应该把它放在哪里?
它不能进入POCO类,因为它连接了几个表,因此需要一个上下文.它可能会进入上下文,但是上下文会因数百个无组织的查询而变得臃肿. 所有业务逻辑都有共同的模式或安排吗?
Lad*_*nka 74
看起来存储库模式是一切的解决方案......存储库不是银弹!
我每天都在使用EF的存储库模式,因为几个月前我开始使用当前的项目时看起来像是推荐的解决方案.我的结论:
IQueryable.Linq-to-entities只是Linq-to-objects的子集,mock不能处理引用完整性,所以我看过很多次绿色单元测试和运行时异常.EF的正确测试方法是集成测试.模拟存储库仅用于测试与数据访问无关的实际业务逻辑.如果您没有对访问或保留数据的业务方法进行集成测试,则表示您未对其进行测试.EF本身已经提供了存储库模式 - DbSet并且ObjectSet是存储库,DbContext并且ObjectContext是工作单元.因此在我看来,存储库模式被过度使用.它适用于需要严格分层的大型项目,或者在为其方法添加额外逻辑的情况下.仅仅因为想要封装对EF的访问而使用存储库通常是无价值的代码,而且只是额外的复杂层.
您可以以相同的方式创建定义查询的可重用方法.