gpt4 book ai didi

entity-framework - Entity Framework 5 中的 "soft deleting"

转载 作者:行者123 更新时间:2023-12-04 08:32:44 24 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

我认为如果您使用其他方法可能会更容易。使用存储库和工作单元 fascade 模式而不是直接调用 EF 上下文,意味着您可以更轻松地控制操作。工作单元类控制保存更改操作。 存储库类控制 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();

}
}

关于entity-framework - Entity Framework 5 中的 "soft deleting",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com