我对在带有Entity Framework Core的MVC Web应用程序中使用存储库模式和工作单元模式有疑问。
我当前正在控制器中实现更新功能。现在,我不知道最好的方法是更新实体。我看过一些视频,他们说更新方法不应出现在这样的存储库中:
public T Update(T entity)
{
DbSet.Attach(entity);
var entry = Context.Entry(entity);
entry.State = System.Data.EntityState.Modified;
}
这意味着我将必须在控制器中这样做:
public IActionResult Edit(int id, [Bind("NeighbourhoodGroup,Neighbourhood,NeighbourhoodId")] Neighbourhoods neighbourhoods)
{
var neighbourhoodsFound = unitOfWork.Neighbourhoods.Get(id);
neighbourhoodsFound.Neighbourhood = neighbourhoods.Neighbourhood;
neighbourhoodsFound.NeighbourhoodGroup = neighbourhoods.NeighbourhoodGroup;
}
但是,这意味着即使对象具有很多属性,我也必须在所有控制器中执行此操作?
我希望有人能给我一些关于最佳方法的建议。
答案 0 :(得分:0)
在您的存储库中,您可以具有以下简单的更新功能:
public void Update(T entity)
{
DbSet.Attach(entity);
ApplicationContext.Entry(entity).State = EntityState.Modified;
}
无论是在控制器中还是在您希望进行更新的地方,都可以通过id获得实体,最好修改要在实体上修改的所有属性,然后从要设置的存储库中调用Update方法修改其状态,最后在EF上下文中调用Save或SaveAsync方法。您的EF上下文应在您的UnitOfWork中公开。
有关更多详细说明,您可以查看这篇文章,这将非常有帮助。 EF Repository Pattern
答案 1 :(得分:-1)
Update
方法的问题。没关系。根据条件从存储库中读取数据更为复杂。在这里,您可以查看Microsoft中的示例。另外,了解clean architecture也很有用。