我有一个包含此方法的通用存储库:
public void Delete<T>(T item) where T : EntityBase
我正在尝试向某些对象添加软删除行为;IE。删除时,它们不会从数据库中删除,而是bool Deleted
设置为afalse
并且它们停止显示在查询中,除非将特定参数设置为包含它们。一般来说,应用程序的行为就好像它们不存在一样,除了管理视图,这些项目可以通过再次翻转该布尔值来恢复。我的问题是,在将对象传递给此方法时,它被处理为EntityBase
,它没有这种软删除行为,因为许多类不需要它。SoftDeleteEntityBase
扩展EntityBase
类以添加软删除行为,但我找不到一种干净的方法来转换对象,以便我可以得到布尔值。我的第一个想法是这样的:
public void Delete<T>(T item) where T : EntityBase
{
if (item is SoftDeleteEntityBase)
{
((SoftDeleteEntityBase)item).Deleted = true;
Update<T>(item);
}
else
{
db.Set<T>().Remove(item);
}
}
但这给了我错误"Cannot convert type T to SoftDeleteEntityBase"
。
我如何得到那个布尔值?