গৃহীত উত্তরের বিপরীতে, আমি বিশ্বাস করি উত্তরাধিকারের তুলনায় রচনাকে সমর্থন করা ভাল । তারপরে কোনও ব্যতিক্রম ছড়িয়ে দেওয়ার জন্য সেভচেন্জেসের মতো পদ্ধতি রাখার প্রয়োজন হবে না। তদুপরি, আপনার প্রথম কেন এই জাতীয় পদ্ধতি থাকা দরকার? আপনার ক্লাসটি এমনভাবে ডিজাইন করা উচিত যাতে এটির পদ্ধতির তালিকার দিকে তাকালে এর গ্রাহক বোকা না হয়। সার্বজনীন ইন্টারফেসটি শ্রেণীর আসল অভিপ্রায় এবং লক্ষ্যটির সাথে একত্রিত হওয়া উচিত যখন গ্রহণযোগ্য উত্তরে সেভচেন্জেস থাকার বিষয়টি বোঝায় না যে প্রসঙ্গটি কেবল পঠনযোগ্য।
যে জায়গাগুলিতে আমার কেবল পঠনযোগ্য প্রবন্ধ থাকতে হবে যেমন সিকিউআরএস প্যাটার্নের পড়ুন পাশে , আমি নিম্নলিখিত বাস্তবায়নটি ব্যবহার করি। এটি এর গ্রাহককে জিজ্ঞাসা করার ক্ষমতা ছাড়া অন্য কিছু সরবরাহ করে না।
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 ব্যবহার করে, আপনি কেবল DbContext এর সন্ধানের ক্ষমতা অ্যাক্সেস করতে পারেন। ধরা যাক আপনার অর্ডার নামে একটি সত্তা রয়েছে, তারপরে আপনি নীচের মত একটিভাবে ReadOnlyDataContext উদাহরণটি ব্যবহার করবেন।
readOnlyDataContext.Set<Order>().Where(q=> q.Status==OrderStatus.Delivered).ToArray();