Entity framework 实体框架6,我应该使用存储库模式吗?
我对实体框架很陌生,仍然在努力解决它。这么多不同的例子和解释,我不知道该怎么做 我有几个问题: 在我当前的应用程序中,我使用的模式包括:Entity framework 实体框架6,我应该使用存储库模式吗?,entity-framework,entity-framework-6,repository-pattern,Entity Framework,Entity Framework 6,Repository Pattern,我对实体框架很陌生,仍然在努力解决它。这么多不同的例子和解释,我不知道该怎么做 我有几个问题: 在我当前的应用程序中,我使用的模式包括: 存储库模式 (在顶部)工作单元 对于每个from,我都会声明一个新的工作单元。因此,当我进行Savechanges时,只有相关的项会受到影响 对于复杂的业务逻辑,我在存储库中为每个类编写方法 例如: 一种方法是:从一个库存位置移除一个项目,将其移动到另一个位置,然后减少旧位置的数量,等等。。。 -或者更复杂的作业,从不同的表读取数据并写入多个表 但最近
- 存储库模式
- (在顶部)工作单元
- 一种方法是:从一个库存位置移除一个项目,将其移动到另一个位置,然后减少旧位置的数量,等等。。。 -或者更复杂的作业,从不同的表读取数据并写入多个表
谢谢首先,尝试将DbContext视为单例对象是个坏主意,因为您无法在操作中管理事务。您必须为每个操作实例化DbContext 第二,尝试将“数据层关注点”与“业务关注点”分开。例如: 一种方法是:从一个库存位置移除一个项目,将其移动到另一个位置,然后减少旧位置的数量
我认为您正在为每个用例编写存储库方法,这不是数据层的问题。您的存储库只需要了解对象的持久化和检索。从另一个角度讲,您的存储库方法只是CRUD方法。您的业务层将使用此方法执行业务逻辑。DbSet不是存储库,除非我们的域对象可以由EF“按原样”使用。即使如此,它公开IQueryable的事实也违背了存储库模式的目的。简而言之,存储库是一个原则,它的实现不是DbSet,但实现可以使用EF作为内部细节。谢谢,这是我错的一点,很抱歉显示了co正确的路径。感谢Hadi给出了一个微妙的答案。关于DbContext,我还感觉每次都需要单独的DbContext,因为交易。关于第二个问题,你是说,我应该保留我的回购协议,并在其中编写业务逻辑方法?你能亲自给我看一个concerte示例代码吗根据经验,使用DbContext的最佳实践是每次在操作中实例化它(不要忘记使用“Using”块以避免内存泄漏)。关于第二个问题,我的意思是,您不应该在存储库中编写业务逻辑。例如,您应该只使用simple Update()方法,然后您的业务逻辑方法将使用此更新“从一个位置移动库存”[link]抱歉,我的上一条评论中有一个问题,现在它不允许我编辑它。正确链接:谢谢hadi,在检查链接并重新阅读您的回复后,这会更有意义,