Genel bir depo uygulamasına sahibim. Asp.net mvc C# kullanıyorum, kod ilk varlık çerçevesi. aşağıdaki gibi benim taban depo Sil ve GetById uygulananYumuşak Silme Özellikli Genel Depo Özelliği
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
:
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;
}
}
Şimdi, 2 soru var
Ben ISoftDelete adında bir arayüz oluşturdu.1) Bu yaklaşım iyi bir yaklaşım mıdır? Performansla ilgili sorunlar var mı?
2) taban depoda Benim asıl getAll fonksiyonu şu şekildedir:
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
nasıl kayıtları listelemek için bunu değiştirmek hallerde isDeleted == false, T ISoftDelete türetilmiştir zaman?
Teşekkür ederiz!
+1 güzel çözüm –
kamu kılma T GetById (uzun id) bu fonksiyon t.Id. bir hata atar gibi bir şey olabilir – SherleyDev
BaseRepository öğesinde bir "GetById (long id)" yöntemini kullanırsanız, bu, projenizdeki herhangi bir varlık örneğinin bir "long Id" özelliğine sahip olduğunu varsaydığınızı gösterir. Bu gereksinimi karşılamak için 'IEntity {long Id {get; }} ve tüm varlıklara uygulayın. Ve bu arayüzden 'ISoftDelete' türetin. arabirim ISoftDelete: IEntity {bool IsDeleted {get; set; }}. Ve şimdi SoftDeleteRepository, her T örneğinin Id ve IsDeleted özelliklerine sahip olduğundan emin. –