Repository یک مخزن یا انباره ای میباشد که میتواند بعنوان لایه DAL در برنامه نویسی مورد استفاده قرار گیرد.
در این مثال قصد داریم برای اطلاعات User با استفاده از Repository عملیات CRUD را انجام دهیم.
ابتدا یک پروژه از نوع Empty MVC ایجاد نمایید.
یک کلاس به نام User درون پوشه Models ایجاد نمایید و محتویات آنرا بصورت زیر ویرایش کنید.
namespace RepositorySample.Models
{
public class User
{
public int ID { get; set; }
public string Fname { get; set; }
public string Lname { get; set; }
public string Email { get; set; }
public bool IsActive { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
}
روی نام پروژه کلیک راست نمایید و گزینه Manage Nuget Packages ر ا انتخاب نمایید از صفحه باز شده از قسمت Brows عبارت EntityFrameWork را جستجو و سپس نصب نمایید.
درون پوشه Models کلاسی بنام DBContext ایجاد نمایید و محتویات آنرا بصورت زیر ویرایش نمایید.
namespace RepositorySample.Models
{
public class DBContext : DbContext
{
public DBContext():base("mycon")
{
}
static DBContext()
{
}
public DbSet<User> user
{
get; set;
}
}
}
همانطور که در قسمت سازنده پیشفرض آن مشاهده میکنید در این مرحله باید رشته اتصالی با نام mycon در فایل webconfig ایجاد نماییم.
<connectionStrings>
<add name="mycon" connectionString="data source=.;initial catalog=repositoryDB;integrated security =true;" providerName="System.Data.SqlClient" />
</connectionStrings>
رشته اتصال فوق را بر اساس سیستم خود تنظیم نمایید.
پوشه ای بنام DAL به روت برنامه اضافه نمایید و کلاسی بنام IUserRepository ایجاد نمایید و سپس اینترفس زیر را درون آن درج نمایید.
namespace RepositorySample.DAL
{
public interface IUserRepository
{
IEnumerable<Models.User> GetUser();
Models.User GetUserByID(int id);
void DeleteUser(int userID);
void InsertUser(Models.User user);
void UpdateUser(Models.User user);
void Save();
}
}
سپس کلاسی دیگر بنام UserRepository را درون پوشه DAL اضافه نمایید و محتویات آنرا بصورت زیر ویرایش نمایید.
namespace RepositorySample.DAL
{
public class UserRepository : IUserRepository,IDisposable
{
public UserRepository(Models.DBContext dbcontext)
{
db = dbcontext;
}
Models.DBContext db = new Models.DBContext();
IEnumerable<Models.User> IUserRepository.GetUser()
{
return db.user.ToList();
}
public Models.User GetUserByID(int id)
{
return db.user.Find(id);
}
public void DeleteUser(int userID)
{
User user = db.user.Find(userID);
db.user.Remove(user);
}
void IUserRepository.InsertUser(Models.User user)
{
db.user.Add(user);
}
public void UpdateUser(User user)
{
db.Entry(user).State = System.Data.Entity.EntityState.Modified;
}
void IUserRepository.Save()
{
db.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
اکنون میتوانید از این کلاس درون کنترلرهای خود استفاده نمایید.
قطعه کد زیر نحوه استفاده از این کلاس در کنترلر Home می باشد.
public class HomeController : Controller
{
DAL.IUserRepository userRepository;
public HomeController() { this.userRepository = new DAL.UserRepository(new Models.DBContext()); }
public HomeController(DAL.IUserRepository userRepository) { this.userRepository = userRepository; }
// GET: Home
public ActionResult Index()
{
return View(userRepository.GetUser());
}
}