c# - 将存储库模式与 Entity Framework 结合使用时分离的实体

标签 c# entity-framework-4 entity repository-pattern

假设我有一个 ITaskRepository 和一个 TaskEntityRepository,它实现 ITaskRepository 并包装对实体的 ObjectContext 的访问。

public interface ITaskRepository{
  Task FindById(int taskId);
  void Insert(Task task);
  void Update(Task task);
}

我现在的问题是,当 FindById 返回实体时,我是否应该将实体与 ObjectContext 分离,并在调用 Update 方法时将其附加回来?

目前我没有从 ObjectContext 中分离实体,但是 Update 方法不包含任何功能(仅调用 SaveChanges())

最佳答案

这取决于您的应用程序。

如果您在无状态环境中工作(例如 ASP.NET Web Forms/MVC),则整个上下文始终是分离的(除非您使用自跟踪 POCO)。

因此,以 ASP.NET MVC Web 应用程序为例,当您想要更改现有实体时,您有两个选择:

  1. 再次获取实体(使用FindById),然后使用Controller.TryUpdateModel合并更改,然后执行SaveChanges() 。在这种情况下,不需要您的 Update 方法。您应该将其更改为简单的 SaveChanges()
  2. 不要获取实体,而是使用 Update 方法将实体附加到图表,然后手动进行更改。

2) POCO 很痛苦(相信我)。 ApplCurrentValues 仅适用于标量属性,因此如果您想要更新关系,则必须为每个关系手动设置 EntityState

我的建议 - 忘记分离实体,并完全失去您的 Update 方法。

正如我所说 - 取决于您的应用程序。

关于c# - 将存储库模式与 Entity Framework 结合使用时分离的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4896301/

相关文章:

entity-framework - ADO.Net 实体模型 (edmx) 与 Entity Framework (v4.0 等)

c# - 使用一个可观察量来同步另一个可观察量

c# - 命名空间和库之间的冲突

c# - 在 Entity Framework 中映射连接表

entity-framework - 在 Entity Framework 中更改继承的类型

android - 具有一对一关系的房间数据库

asp.net-mvc - 更改数据注释中的验证消息

c# - 未调用 Jquery Ajax 成功函数

c# - 寻求建议 - Excel 插件 - C# 服务

entity-framework - EF4 : Splitting a table to two entities using POCOs - why am I getting an exception?