私は一般的なリポジトリ実装を持っています。私はasp.net mvc C#、コードの最初のエンティティフレームワークを使用しています。次のように私は私のベースのリポジトリ内の削除とGetByIdを実装ソフト削除機能を備えた汎用リポジトリ
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
::私はISoftDeleteという名前のインターフェイスを作成し
今
public virtual void Delete(T entity)
{
if (entity is ISoftDelete)
{
((ISoftDelete)entity).IsDeleted = true;
}
else
{
dbset.Remove(entity);
}
}
public virtual T GetById(long id)
{
T obj = dbset.Find(id);
if (obj is ISoftDelete)
{
if (((ISoftDelete)obj).IsDeleted)
return null;
else
return obj;
}
else
{
return obj;
}
}
、私は2つの質問を持っています。
1)このアプローチは良いアプローチですか?パフォーマンス関連の問題?
2)ベースのリポジトリに私の元GETALL機能は、このようなものです:
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
どのように私はレコードを一覧表示するためには、それを修正しなければならどこIsDeleted == falseを、TはISoftDeleteから派生したとき?
ありがとうございました!
+1いい溶液 –
公共オーバーライドT GetById(長いID)この関数はt.Id.にエラーをスローするようなものであってもよいです – SherleyDev
BaseRepositoryに 'GetById(long id)'メソッドを置くと、これは、プロジェクトのエンティティインスタンスに '長いId'プロパティがあると仮定していることを意味します。この要件を満たすためには、 'IEntity {long Id {get; }} 'を作成し、すべてのエンティティに適用します。このインターフェースから 'ISoftDelete'を引き出します。 'インターフェイスISoftDelete:IEntity {bool IsDeleted {get;セット; }} '。そして、あなたのSoftDeleteRepositoryは、各TインスタンスがIdとIsDeletedプロパティを持つことを確信しています。 –