3

我有一些代码可以在使用 EF5 的应用程序中软删除记录。我的“可删除”类实现了 ISoftDelete,它只是说实现者必须有一个 bool Deleted 属性。

当我的用户单击删除时,我调用 DbContext..Remove(entity)

这会将绑定到父实体的任何属性清除为 null(如果我的父级有我的可删除实体的集合!)。

在我的 DbContext 中,我重写 SaveChanges 方法以查找任何已删除的实体,如果它们实现了我的 ISoftDelete 接口,我将状态设置为已修改而不是已删除,并将其 Deleted 属性设置为 true 以标记为已删除。我的问题是持有对父母的引用的属性为空。

调查似乎指向 ApplyOriginalValues,但由于我的值不是公共属性,而是作为集合中的孩子为我创建的,因此我正在努力实施。你能帮我吗?

4

1 回答 1

2

我认为如果您使用另一种方法可能会更容易。使用存储库和工作单元 fascade 模式而不是直接调用 EF 上下文,意味着您可以更轻松地控制操作。工作单元类控制 savechanges 操作。存储库类控制 CRUD、GetLists 等。

   public class RepositoryBase<TPoco> : IRespository {

       public RepositoryBase(DbContext context) { Context = context; }
          //... CRUD methods....
          public bool Remove(TPoco poco) {
                   if (typeof ISoftDelete).IsAssignableFrom(Typeof(TPoco)){
                       // proceed with modify actions
                   }
                   else {
                          Context.Set<TPoco>().Remove(poco);
                   }
          }
   }

   public class Luw : ILuw{
         // ....
          public IRepositoryBase<TPoco> GetRepository<TPoco>() where TPoco : ???{
              return (new RepositoryFactory<TPoco>().GetRepository(Context));
         }

  public MuCustomResult  Commit() {
          .... any special context manipulation before save
          myCustomResultRecordsAffected = Context.SaveChanges();

  }
}
于 2013-08-30T00:12:02.803 回答