假设我有一个ITaskRepository和一个TaskEntityRepository来实现ITaskRepository并包含对Entity的ObjectContext的访问。
public interface ITaskRepository{
Task FindById(int taskId);
void Insert(Task task);
void Update(Task task);
}
现在我的问题是,当FindById返回实体时,我应该从ObjectContext中分离实体,并在调用方法Update时将其附加回来吗?
目前我没有从ObjectContext中分离实体,但是Update-method不包含任何功能(只调用SaveChanges())
答案 0 :(得分:4)
这取决于您的申请。
如果您在无状态环境(例如ASP.NET Web Forms / MVC)中工作,则整个上下文始终是分离的(除非您使用自我跟踪POCO)。
因此,以ASP.NET MVC Web应用程序为例,当您想要对现有实体进行更改时,您有两个选项:
FindById
),然后使用Controller.TryUpdateModel
合并更改,然后执行SaveChanges()
。在这种情况下,您不需要Update
方法。您应该将其更改为SaveChanges()
。Update
方法将Attach
实体添加到图表中,然后手动进行更改。 2)POCO的痛苦(相信我)。 ApplCurrentValues
仅适用于标量属性,因此如果您想更新关系资源,则必须为每个关系手动设置EntityState
。
我的建议 - 忘记分离实体,完全丢失Update
方法。
正如我所说 - 取决于你的申请。
答案 1 :(得分:0)
如果先进行数据库设计并从数据库创建实体,则无法将实体与ObjectContext分开。但是,您可以选择代码第一个POCO模型,然后单独创建DbContext,然后您应该能够将实体与基础上下文分开。