با سلام
من طبق آموزش سی شارپ پیشرفته شما در تاپ لرن generic repository ایجاد کردم بر روب پروژه ام وی سی، حال طبق گفته شما اگر متد بیشتری بخواهیم باید یک repository جدید برای جدولمان ایجاد کنیم که از generic repository ارٍث بری کند من اینکار را انجام میدهم اما به مشکل بر میخورم روش خاص دارد اگر اینطور است میشه نمونه بگذارید
سلام
متن ارور را بگذارید و نحوه ی کار خودتون را با جزییات توضیح بدهید
using DataLayer.Context; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; namespace DataLayer.Services { public class GenericRepository<Tentity> where Tentity : class { private NORTHWNDEntities _db; private DbSet<Tentity> _dbSet; public GenericRepository(NORTHWNDEntities db) { _db = db; _dbSet = _db.Set<Tentity>(); } public virtual IEnumerable<Tentity> Get(Expression<Func<Tentity, bool>> where = null) { IQueryable<Tentity> query = _dbSet; if (where != null) { query = query.Where(where); } return query.ToList(); } public virtual Tentity GetById(object id) { return _dbSet.Find(id); } public virtual void Insert(Tentity entity) { _dbSet.Add(entity); } public virtual void update(Tentity entity) { _dbSet.Attach(entity); _db.Entry(entity).State = EntityState.Modified; } public virtual void Delete(Tentity entity) { if (_db.Entry(entity).State == EntityState.Detached) { _dbSet.Attach(entity); } _dbSet.Remove(entity); } public virtual void Delete(object Id) { var entity = GetById(Id); Delete(entity); } } }
این کد generic
using DataLayer.Context; using System.Collections.Generic; using System.Linq; using ViewModels; namespace DataLayer.Repositories { public class ProductRepositories:GenericRepository<NORTHWNDEntities db> { private NORTHWNDEntities db; public ProductRepositories(NORTHWNDEntities context) { db = context; } public List<ProductViewModel> LessData() { return db.Products.Select(c => new ProductViewModel() { ProductID = c.ProductID, ProductName = c.ProductName, // UnitPrice = Convert.ToDecimal(c.UnitPrice) }).ToList(); } } }
در اینجا میخوام ارث بری کنم چون یک متد جدید اضافه شده
خطایی که میده به رفرنس گیر میده
سلام خدمت شما دوست عزیز
در کلاس Generic ، هم Context و هم dbSet رو از حالت Private به Protected تغییر بدین
ProductRepositories باید از GenreciRepository<Product> ارث بری کنه که در این صورت شما هم به context و dbset و هم به متد های اصلی Generic Repository دسترسی دارین و میتونین متدهای جدیدتون رو پیاده سازی کنین
سلام
من اصلا نمیدونم چرا جناب مدائنی یه همچین چیزی رو آموزش داده.
خود EntityFramework بر اساس الگوی UnitOfWork , Repository ساخته شده و اینکار در حالت عادی خیلی بیهوده است . هیچ چیزی به کد اضافه نمیکنه.
شاید تو یه سری businessهای خاص نیاز باشه که متدهای base رو proxy کنیم تا یه سری پیش شرطها رو تحمیل برنامهنویس کنیم یا از اشتباهات در Load ابتدایی دادهها جلوگیری کنیم. تو این مورد خاص به درد میخوره ولی در حالت عادی فقط یه انتزاع بیکاربرد ایجاد شده.
ای کاش این Generic Repositry رو با Dapper آموزش میدادین! Entity Framework اومده که ما اینکار رو نکنیم!
سلام کسی می تونه کمکم کنه ؟؟؟؟؟؟؟؟؟
سلام
GenericRepository داخلش سازندش از db رو داره دریافت میکنه که باید توی ProductRepositories بهش بدی.
سازنده باید این رو داشته باشه
:base(db)
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)