Tôi có cài đặt kho chung. Tôi đang sử dụng asp.net mvc C#, mã khuôn khổ thực thể đầu tiên.Kho lưu trữ chung với tính năng xóa mềm
Tôi tạo ra một giao diện mang tên ISoftDelete:
public interface ISoftDelete
{
bool IsDeleted { get; set; }
}
tôi thực hiện Delete và GetById trong kho cơ sở của tôi như sau:
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;
}
}
Bây giờ, tôi có 2 câu hỏi.
1) Phương pháp này có phải là cách tiếp cận tốt không? Bất kỳ vấn đề nào liên quan đến hiệu suất?
2) chức năng GetAll ban đầu của tôi trong kho cơ bản là như thế này:
public virtual IEnumerable<T> GetAll()
{
return dbset.ToList();
}
Làm thế nào tôi có trách nhiệm sửa đổi nó để liệt kê hồ sơ, nơi IsDeleted == false, khi T có nguồn gốc từ ISoftDelete?
Cảm ơn bạn!
+1 giải pháp tốt đẹp –
public override T GetById (id dài) chức năng này ném một lỗi trên t.Id. – SherleyDev
Nếu bạn đặt một phương thức 'GetById (long id)' trong BaseRepository của bạn, điều này có nghĩa rằng bạn đang giả định bất kỳ cá thể thực thể nào trong dự án của bạn nên có thuộc tính 'long Id'. Để đáp ứng yêu cầu này, bạn có thể định nghĩa một giao diện như 'IEntity {long Id {get; }} 'và áp dụng nó cho tất cả các thực thể. Và lấy được 'ISoftDelete' của bạn từ giao diện này. 'interface ISoftDelete: IEntity {bool IsDeleted {get; bộ; }} '. Và bây giờ SoftDeleteRepository của bạn chắc chắn rằng mỗi cá thể T sẽ có các thuộc tính Id và IsDeleted. –