このメソッドを含む汎用リポジトリがあります。
public void Delete<T>(T item) where T : EntityBase
一部のオブジェクトに論理的な削除動作を追加しようとしています。すなわち。削除してもデータベースから削除されませんが、代わりに abool Deleted
が設定されfalse
、特定のパラメーターがそれらを含めるように設定されていない限り、クエリに表示されなくなります。一般に、アプリケーションはそこに存在しないかのように動作しますが、ブール値を再度反転することでこれらのアイテムを復元できる管理ビューを除きます。私の問題は、オブジェクトをこのメソッドに渡す際に、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"
。
どうすればそのブールに到達できますか?