Kabul edilen cevabın aksine, miras yerine kompozisyonu tercih etmenin daha iyi olacağına inanıyorum . O zaman, bir istisna atmak için SaveChanges gibi yöntemleri tutmaya gerek kalmaz. Üstelik neden ilk etapta bu tür yöntemlere ihtiyacınız var? Bir sınıfı, yöntem listesine baktığında tüketicisinin aldanmayacağı şekilde tasarlamalısınız. Genel arabirim, sınıfın gerçek amacı ve hedefi ile uyumlu olmalıdır, ancak kabul edilen yanıtta SaveChanges'a sahip olmak, Bağlamın salt okunur olduğu anlamına gelmez.
CQRS modelinin Okuma tarafı gibi salt okunur bir bağlama sahip olmam gereken yerlerde , aşağıdaki uygulamayı kullanıyorum. Tüketicisine Sorgulama yeteneklerinden başka bir şey sağlamaz.
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();
}
}
ReadOnlyDataContext'i kullanarak, yalnızca DbContext'in sorgulama yeteneklerine erişebilirsiniz. Diyelim ki Order adında bir varlığınız var, o zaman ReadOnlyDataContext örneğini aşağıdaki gibi kullanacaksınız.
readOnlyDataContext.Set<Order>().Where(q=> q.Status==OrderStatus.Delivered).ToArray();