gpt4 book ai didi

nhibernate - 使用 Fluent NHibernate 过滤软删除数据

转载 作者:行者123 更新时间:2023-12-05 01:30:58 26 4
gpt4 key购买 nike

我正在尝试使用 Fluent NHibernate 在我的应用程序中实现简单的软删除。所有实体都有一个 bool 标志 IsDeleted,删除操作仅将此属性设置为 true。我正在努力查询相互引用的更复杂的实体,例如通过多对多关系。假设我有 Person 实体,有一个 Project 集合:

class Person : Entity {
public virtual IList<Project> Projects { get; set; }
}

class Project : Entity {
//some properties
}

现在假设 Person p 有 Project proj1 和 proj2。如果 proj1 被软删除,我们只需将其 IsDeleted 属性设置为 true。但是,当我访问 p 的项目时,集合也会自动延迟加载 proj1,而与其标志无关。当然,我总是可以过滤集合,例如通过 Projects.Where(x => !x.Isdeleted),但这会导致重复的代码容易出现错误。我想将这种数据处理与我的表示层分开。

我想通过一些全局规则自动执行此过程,该规则说“仅加载 IsDeleted 设置为 false 的实体”,该规则适用于所有查询和延迟加载的集合。

我尝试过的:

  • 覆盖事件,但我无法拦截所有数据库读取并过滤所有读取的实体。
  • 过滤器,我无法使用延迟加载的集合。

您会推荐什么,在没有代码重复且易于与表示层分离的情况下实现软删除的最简单方法是什么?

最佳答案

为了完成@Rippo,在我的脑海中,这样的事情应该可行:

public abstract class BaseEntity
{
public bool IsDeleted {get;set;}
}

public class SomeEntity : BaseEntity
{
....
}

public abstract class EntityMap<T>: ClassMap<T> where T:BaseEntity
{
public EntityMap()
{
Where(x=>!x.IsDeleted);
}
}

public class SomeEntityMap: EntityMap<SomeEntity>
{
...
}

关于nhibernate - 使用 Fluent NHibernate 过滤软删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474259/

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