我之前使用的代码存储库包含此代码:
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
我的应用程序很简单,我注意到很多人说“EF已经是一个存储库,所以你不需要使用另一个”。问题是如果没有外部存储库包装,我现在发现当我想编写一个简单的删除代码时,我发现有必要这样做:
DbEntityEntry dbEntityEntry1 = db.Entry(objectiveDetail);
if (dbEntityEntry1.State != EntityState.Deleted)
{
dbEntityEntry1.State = EntityState.Deleted;
}
else
{
db.ObjectiveDetails.Attach(objectiveDetail);
db.ObjectiveDetails.Remove(objectiveDetail);
}
我的一行repo.delete现已改为十行。有没有办法我可以回过头来简化EF的条目删除,而不必硬编码所有行来检查条目是否已经附加等等?
答案 0 :(得分:1)
实际上,尽管EF本身就是一个存储库,但在许多情况下,从关注点分离到抽象EF输出并使用存储库模式来实现这一点仍然有意义。我经常使用EF的存储库模式。如果您使用自动化单元测试,则存储库模式可以更轻松地隔离代码以进行测试。