我的数据层接口提供了插入,更新,删除,getQuery等常用方法。
有时我想添加一个处理存储库的方法。我注意到我几乎可以使用接口提供的常用方法来完成所有操作。我唯一不能做的就是“包括”。
我怀疑是否将Include方法添加到db接口,因此我的业务层可以完成所有操作而不依赖于实体框架(system.data.entities)。
此问题的解决方法是什么?
答案 0 :(得分:3)
公开自定义Include
包装器不会使您的上层依赖于EF。 Include将成为DAL层公共接口的一部分。做出“如果我决定改变ORM怎么办?”的决定。制作应用程序真的很糟糕 - 构建工作解决方案,然后在有时间的情况下改进它。切换到其他ORM非常罕见,并计划您的应用程序支持该交换机在99%的情况下浪费时间和浪费金钱。您的责任是在三个月后及时提供工作解决方案,而不是可扩展的解决方案。
暴露Include
的唯一缺点可能是单元测试和模拟 - 这需要将EF相关的包含隐藏到DAL内部,以便可以模拟它。这可能是在previous question。
答案 1 :(得分:1)
没有真正的解决方法。将Include
添加到数据库接口(IObjectSet
)是解决此问题的常用方法。至于你对与实体框架过于紧密联系的担忧,我会说无论你是否添加这种扩展方法,完全切换ORM将会有相当大的作用。我不担心。
这是来自Julie Lerman的blog post添加Include
扩展方法