Berbeda dengan jawaban yang diterima, saya percaya akan lebih baik untuk lebih memilih komposisi daripada warisan . Maka tidak perlu menyimpan metode seperti SaveChanges untuk membuat pengecualian. Selain itu, mengapa Anda perlu memiliki metode seperti itu sejak awal? Anda harus mendesain kelas sedemikian rupa sehingga konsumennya tidak tertipu ketika melihat daftar metodenya. Antarmuka publik harus sejalan dengan maksud dan tujuan kelas yang sebenarnya sementara dalam jawaban yang diterima memiliki SaveChanges tidak berarti bahwa Konteks hanya-baca.
Di tempat-tempat di mana saya perlu memiliki konteks hanya-baca seperti di sisi Baca pola CQRS , saya menggunakan implementasi berikut. Itu tidak memberikan apa pun selain kemampuan Querying kepada konsumennya.
public class ReadOnlyDataContext
{
private readonly DbContext _dbContext;
public ReadOnlyDataContext(DbContext dbContext)
{
_dbContext = dbContext;
}
public IQueryable<TEntity> Set<TEntity>() where TEntity : class
{
return _dbContext.Set<TEntity>().AsNoTracking();
}
}
Dengan menggunakan ReadOnlyDataContext, Anda hanya dapat memiliki akses ke kemampuan kueri DbContext. Misalkan Anda memiliki entitas bernama Order, maka Anda akan menggunakan instance ReadOnlyDataContext dengan cara seperti di bawah ini.
readOnlyDataContext.Set<Order>().Where(q=> q.Status==OrderStatus.Delivered).ToArray();