定义与过滤器的关联?

时间:2011-01-07 03:35:49

标签: c# entity-framework

有没有办法在实体框架中创建始终应用“where”过滤器的关联?

这是一个例子: 假设我有一个使用“软”删除的数据库 - 所以每个表中都有一个“已删除”列。

因此,如果我有一个与Address(1:0..n)相关的Customer实体,我希望总是在已删除的标志上过滤Addresses导航属性,这样如果我去了Customer.Addresses,该集合将仅返回已删除的地址== 0。

任何人都知道某种方法吗?

1 个答案:

答案 0 :(得分:3)

不,没有。

同样的原因是你不能拥有条件外键。

解决方法可能是在地址表中使用TPH:

  • 创建名为地址
  • 的抽象实体
  • 创建名为 AddressDeleted AddressNotDeleted
  • 的衍生实体
  • 设置鉴别器映射(AddressDeleted映射到Deleted = 0时的地址)
  • 在Customer和AddressDeleted之间创建一个导航属性。

因此,当您执行ctx.Customer.Include("AddressDeleted").Single()时,它只会返回标记为已删除的地址。

或者您可以定义与地址的关联,并使用ctx.Customer.Addresses.OfType<AddressDeleted>()

这能解决您的问题吗?