روش Code First با الگوی Repository در Mvc

دوشنبه 27 مهر 1394

در این مقاله قصد داریم در مورد روش Code First با الگوی Repository یک فرم افزودن ، ویرایش و نمایش جزئیات کاربران و حذف کاربران را آموزش دهیم، هدف، استفاده از الگوی Repository است.

روش Code First  با الگوی Repository در Mvc

ابتدا در مورد رویداد Code First توضیح می دهیم که چه است و چرا از آن استفاده می نماییم، بعدا در مورد الگوی Repository صحبت می نماییم.

سه روش در Entity Framework برای کار کردن با پایگاه داده وجود دارد که این سه روش به شرح زیر است:

1-Database First

2-Model First

3-Code First

1-روش Code First

در Code First اول ما Entity Model مان را می سازیم، ما تنها نیاز به تعریف کلاس های Entity داریم.باقی کار توسط Entity Framework انجام می شود.

روش Repository:

برای ایجاد یک لایه ی انتزاعی بین Data Access Logic و business logic در Application استفاده می شود.

مسئولیت برقراری ارتباط با لایه ی data access و به دست آوردن اطلاعات و انتقال اطلاعات به لایه business logic است.

درست کردن یک پروژه ی Asp.Net Mvc:

Visual خود را باز کنید و یک پروژه ی جدید درست کنید نوع پروژه را از نوع MVC انتخاب کنید به صورت تصویر زیر:

بعد از انتخاب کردن تصویر زیر را مشاهده می کنید:

حالا زمان اضافه کردن Model است شما روی پوشه ی Model راست کلیک کرده و یک کلاس به نام Emloyee می سازید به صورت زیر:

namespace EmployeeManagement.Models  
{  
    public class Employee  
    {  
        [Key]  
        public int Id { get; set; }  
        public string Name { get; set; }  
        public string Email { get; set; }  
        public string Age { get; set; }  
  
        public string Address { get; set; }  
  
    }  
} 

وقتی Key یعنی همان کلید اصلی را می گذارید به خطای زیر برخورد خواهد کرد که باید فضای نام زیر را اضافه نمایید:

System.ComponentModel.DataAnnotations

اکنون زمان اضافه کردن یک مدل دامنه به پایگاه داده ی خود است، اضافه کردن یک مدل جدید به نام EmployeeContext.cs به صورت زیر است

هنگامی که شما از کلاس DbContext ارث بری می نمایید باید حتما فضای نام زیر را اضافه نمایید:

System.Data.Entity

حالا کلاس EmployeeContext را اضافه نمایید.

    using System.Data.Entity;  
      
    namespace EmployeeManagement.Models  
    {  
        public class EmployeeContext :DbContext  
        {  
            public EmployeeContext():base("myconnection")  
            {  
            }  
      
            public DbSet<Employee> Employees { get; set; }  
        }  
    }  

اضافه کردن Repository:

یک پوشه به نام Repositoryt می سازید و دو کلاس زیر را در آن ایجاد می کنید:

کلاس IRepository:

    using System;  
    using System.Collections.Generic;  
      
    namespace EmployeeManagement.Repository  
    {  
        public interface IRepository<T> where T: class  
        {  
            IEnumerable<T> GetAll();  
            T GetById(object Id);  
            void Insert(T obj);  
            void Update(T obj);  
            void Delete(Object Id);  
            void Save();  
        }  
    }  

کلاس Repository:

    using EmployeeManagement.Models;  
    using System;  
    using System.Collections.Generic;  
    using System.Data.Entity;  
    using System.Linq;  
    using System.Web;  
      
    namespace EmployeeManagement.Repository  
    {  
        public class Repository<T> : IRepository<T> where T : class  
        {  
            private EmployeeContext db;  
            private DbSet<T> dbSet;  
      
            public Repository()  
            {  
                db = new EmployeeContext();  
                dbSet = db.Set<T>();  
            }  
            public IEnumerable<T> GetAll()  
            {  
                return dbSet.ToList();  
            }  
             
            public T GetById(object Id)  
            {  
                return dbSet.Find(Id);  
            }  
      
            public void Insert(T obj)  
            {  
                dbSet.Add(obj);  
            }  
            public void Update(T obj)  
            {  
                db.Entry(obj).State = EntityState.Modified;  
            }  
            public void Delete(object Id)  
            {  
                T getObjById = dbSet.Find(Id);  
                dbSet.Remove(getObjById);  
            }  
            public void Save()  
            {  
                db.SaveChanges();  
            }  
            protected virtual void Dispose(bool disposing)  
            {  
                if (disposing)  
                {  
                    if (this.db != null)  
                    {  
                        this.db.Dispose();  
                        this.db = null;  
                    }  
                }  
            }  
      
      
        }  
    }  

افزودن Controller:

داخل پوشه ی Controller یک Controller جدید می سازید

نام زیر را برای آن وارد می نمایید

داخل Controller کد زیر را می نویسید:

using EmployeeManagement.Models;  
using EmployeeManagement.Repository;  
using System.Web.Mvc;  
  
namespace EmployeeManagement.Controllers  
{  
    public class EmployeeController : Controller  
    {  
        private IRepository<Employee> _repository = null;  
        public EmployeeController()  
        {  
            this._repository = new Repository<Employee>();  
        }  
  
        public ActionResult Index()  
        {  
            var employees = _repository.GetAll();  
            return View(employees);  
        }  
  
        [HttpGet]  
        public ActionResult Create()  
        {  
            return View();  
        }  
  
        [HttpPost]  
        public ActionResult Create(Employee employee)  
        {  
            if (ModelState.IsValid)  
            {  
                _repository.Insert(employee);  
                _repository.Save();  
                return RedirectToAction("Index");  
            }  
            else  
            {  
                return View(employee);  
            }  
        }  
  
  
        public ActionResult Edit(int Id)  
        {  
            var employee = _repository.GetById(Id);  
            return View(employee);  
        }  
  
        [HttpPost]  
        public ActionResult Edit(Employee employee)  
        {  
            if (ModelState.IsValid)  
            {  
                _repository.Update(employee);  
                _repository.Save();  
                return RedirectToAction("Index");  
            }  
            else  
            {  
                return View(employee);  
            }  
        }  
  
        public ActionResult Details(int Id)  
        {  
            var employee = _repository.GetById(Id);  
            return View(employee);  
        }  
        public ActionResult Delete(int Id)  
        {  
            var employee = _repository.GetById(Id);  
            return View(employee);  
        }  
  
        [HttpPost, ActionName("Delete")]  
        public ActionResult DeleteConfirmed(int Id)  
        {  
            var employee = _repository.GetById(Id);  
            _repository.Delete(Id);  
            _repository.Save();  
            return RedirectToAction("Index");  
        }  
    }  

افزودن View:

برای افزودن View روی ActionResault مورد نظر کلیک راست نمایید ، پنجره ای باز می شود که Template آن شامل [insert, delete, edit, select] است، علاوه بر آن ModelClass خود را هم اضافه می نمایید.

به عنوان مثال برای لیست به صورت زیر انجام می دهید:

برای درست کردن یک رکورد جدید به صورت زیر:

برای ویرایش کردن به صورت زیر:

برای نمایش جزئیات به صورت زیر :

برای حذف از View ی زیر استفاده می کنیم:

بعد از اینکه View ها اضافه شدند به صورت زیر در پوشه ی View قرار خواهند گرفت:

وقتی پروژه ی خود را اجرا کنید پایگاه داده به صورت اتوماتیک ساخته می شود چون ما از روش Code First استفاده کردیم.

برای ConnectionString قطعه کد زیر را در Web.Config می نویسید:

    <connectionStrings>  
       <add name="DefaultConnection" connectionString="server=.; Database=TestEmployee; User Id=sa; Password=password;" providerName="System.Data.SqlClient" />  
    </connectionStrings>  

اگر F5 را بزنید و خروجی به صورت زیر می شود:

زمانی که بخواهیم یک رکورد جدید بسازیم به صورت زیر:

زمانی که بخواهید یک رکورد را ویرایش کنید:

زمانی که بخواهید یک رکورد را جزئیات آن را مشاهده کنید:

زمانی که می خواهید یک رکورد را حذف نمایید:

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید