J'ai une implémentation de référentiel générique. J'utilise asp.net mvc C#, code premier cadre de l'entité.Référentiel générique avec fonction de suppression logicielle
J'ai créé une interface nommée ISoftDelete:
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
Supprimer et j'ai mis GetById dans mon référentiel de base comme suit:
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;
}
}
Maintenant, j'ai 2 questions.
1) Cette approche est-elle une bonne approche? Des problèmes liés à la performance?
2) Ma fonction GetAll d'origine dans le référentiel de base est comme ceci:
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
Comment vais-je modifier afin de répertorier les enregistrements où IsDeleted == false, lorsque T est dérivé de ISoftDelete?
Merci!
+1 solution agréable –
public override T GetById (longue id), cette fonction renvoie une erreur sur t.Id. – SherleyDev
Si vous mettez une méthode 'GetById (long id)' dans votre BaseRepository, cela signifie que vous supposez que toute instance d'entité dans votre projet doit avoir une propriété 'long Id'. Afin de satisfaire cette exigence, vous pouvez définir une interface telle que 'IEntity {long Id {get; }} 'et l'appliquer à toutes les entités. Et dérivez votre 'ISoftDelete' de cette interface. 'interface ISoftDelete: IEntity {bool IsDeleted {get; ensemble; }} '. Et maintenant votre SoftDeleteRepository est sûr que chaque instance T aura les propriétés Id et IsDeleted. –