انجام چهار عمل اصلی با استفاده از تکنولوژی linq در MVC

در این مقاله میخواهیم عملیات درج ،خواندن ،ویرایش و حذف اطلاعات را با استفاده از تکنولوژی linq روی پایگاه داده Sql در MVC انجام دهیم

انجام چهار عمل اصلی با استفاده از تکنولوژی linq در MVC

انجام چهار عمل اصلی (CRUD) با استفاده از تکنولوژی linq در MVC

در ابتدا در پایگاه داده یک جدول به نام Employee به شکل زیر در پایگاه داده خود بسازید:



    CREATE TABLE [dbo].[Employee]  
    (  
        [id] [int] IDENTITY(1,1) NOT NULL,  
        [EmpName] [varchar](50) NOT NULL,  
        [EmpAddress] [varchar](50) NOT NULL,  http://www.c-sharpcorner.com/UploadFile/85ed7a/crud-operation-using-linq-to-sql-in-mvc492/
        [EmpEmailId] [varchar](50) NOT NULL,  
    )   

حال برنامه ویژوال استدیو خود را باز کنید و از طریق مسیر زیر یک پروژه جدید بسازید:

File => New => Project.

و Asp.net MVC 4  Web Application  را انتخاب و نام پروژه و مسیر آنرا تنظیم کنید سپس نوع پروژه را  Empty انتخاب کنید.

حال پس از ایجاد پروژه جدید روی نام پروژه کلیک راست کنید و گزینه Add  New Item وقسمت data  را کلیک کنید  سپس آیتم Linq to Sql Classes را اانتخاب  و رو ی دکمه Add کلیک کنید پس از انجام این مراحل یک فایل با پسوند dbml. مشاهده خواهید کرد از پنجره Server Explorer به پایگاه داده خود متصل شوید  و جدول Employee را درگ کنید تابه فایل dbml  شما اضافه شود:

حال نوبت به ساخت مدل یرای جدولمان می رسد روی پوشه Model  کلیک راست کرده گزینه Add وسپس Class را انتخاب کنید و نام employe   را برای کلاس وارد کنید بدنه کلاس را به شکل زیر بازنویسی کنید:


    namespace crudoperation_linq.Models  
    {  
        public class employe  
        {  
            public int id { get; set; }  
            public string employename { get; set; }  
            public string employeaddress { get; set; }  
            public string employeemailid { get; set; } 
        }  
    }   

پس از ساخت مدل نوبت به ساخت کنترلر میرسد رو ی پوشه Controllers کلیک راست کرده و یک کنترلر جدی از نوع empty  برای پیاده سازی چهار عمل اصلی ایجاد کنید:


    namespace crudoperation_linq.Controllers  
    {  
        public class empController : Controller  
        {  
            // GET: emp  
      
            DataClasses1DataContext db = new DataClasses1DataContext();  
            public ActionResult Index()  
            {  
                IList<employe> employelist = new List<employe>();  
                var query = from qrs in db.Employees select qrs;  
                var listdata = query.ToList();  
      
                foreach (var employedata in listdata)  
                {  
                    employelist.Add(new employe()  
                    {  
                        id = employedata.id,  
                        employename = employedata.EmpName,  
                        employeaddress = employedata.EmpAddress,  
                        employeemailid = employedata.EmpEmailId,  
                    });                
                }             
                return View(employelist);  
            }  
      
            public ActionResult Create()  
            {  
                employe emps = new employe();  
                return View(emps);  
            }  

            [HttpPost]  
            public ActionResult Create(employe mod)  
            {  
                Employee emps = new Employee();    
                emps.EmpName = mod.employename;  
                emps.EmpAddress = mod.employeaddress;  
                emps.EmpEmailId = mod.employeemailid;  
                db.Employees.InsertOnSubmit(emps);  
                db.SubmitChanges();  
                return RedirectToAction("Index");    
           }
      
            [HttpGet]  
            public ActionResult Edit(int id)  
            {  
                employe model = db.Employees.Where(val => val.id ==id).Select(val => new employe()  
                {  
                    id = val.id,  
                    employename = val.EmpName,  
                    employeaddress = val.EmpAddress,  
                    employeemailid = val.EmpEmailId  
                }).SingleOrDefault();  
      
                return View(model);  
              
            }  

            public ActionResult Edit(employe mod)  
            {  
                Employee emp = db.Employees.Where(val => val.id == mod.id).Single<Employee>();  
                emp.id = mod.id;  
                emp.EmpName = mod.employename;  
                emp.EmpAddress = mod.employeaddress;  
                emp.EmpEmailId = mod.employeemailid;               
                db.SubmitChanges();    
                return RedirectToAction("index");            
            }  
      
            public ActionResult Delete(int id)  
            {  
                employe emp = db.Employees.Where(val => val.id == id).Select(val => new employe()  
                   {  
                        id= val.id,  
                       employename  = val.EmpName,  
                       employeaddress = val.EmpAddress,  
                       employeemailid = val.EmpEmailId  
                    }).SingleOrDefault();  
      
                return View(emp);   
            }  

            [HttpPost]  
            public ActionResult Delete(employe mod)  
            {  
                Employee emp = db.Employees.Where(val => val.id == mod.id).Single<Employee>();  
                db.Employees.DeleteOnSubmit(emp);  
                db.SubmitChanges();                
                return RedirectToAction("Index");  
             }  
      
            public ActionResult Details (int id)  
            {  
               employe  emp = db.Employees.Where(val => val.id == id).Select(val => new employe()  
                {  
                    id = val.id,  
                    employename = val.EmpName,  
                    employeaddress = val.EmpAddress,  
                    employeemailid = val.EmpEmailId,  
                }).SingleOrDefault();  
                return View(emp);                  
            }    
        }     
    }   

حال برای هر عملیات باید ویو آنرا بسازیم ابندا برای متد Create  ویو میسازیم رو ی متد آن کلیک راست کرده و گزینه  add view  را انتخاب کنید:



    @model crudoperation_linq.Models.employe  
      
    @Scripts.Render("~/bundles/jquery")  
    @Scripts.Render("~/bundles/jqueryval")  
      
    @using (Html.BeginForm())   
    {  
        @Html.AntiForgeryToken()   
         <div class="form-horizontal">  
            <h4>employe</h4>  
            <hr />  
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })  
            <div class="form-group">                
                 @Html.LabelFor(model => model.employename, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employename, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employename, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                @Html.LabelFor(model => model.employeaddress, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employeaddress, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employeaddress, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                @Html.LabelFor(model => model.employeemailid, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employeemailid, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employeemailid, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                <div class="col-md-offset-2 col-md-10">  
                    <input type="submit" value="Create" class="btn btn-default" />  
                </div>  
            </div>  
        </div>  
    }  
      
    <div>  
        @Html.ActionLink("Back to List", "Index")  
    </div>   

حال برای دیدن خروجی و ثبت یک عضو جدید برنامه را اجرا کنید:

حال باد ویو مربوط به index که لیست افراد را نشان می دهد بسازیم:



    @model IEnumerable<crudoperation_linq.Models.employe>  
      
    <p>  
        @Html.ActionLink("Create New", "Create")  
    </p>  
    <table class="table">  
        <tr>  
            <th>  
                @Html.DisplayNameFor(model => model.employename)  
            </th>  
            <th>  
                @Html.DisplayNameFor(model => model.employeaddress)  
            </th>  
            <th>  
                @Html.DisplayNameFor(model => model.employeemailid)  
            </th>  
            <th></th>  
        </tr>  
      
    @foreach (var item in Model) {  
        <tr>  
            <td>  
                @Html.DisplayFor(modelItem => item.employename)  
            </td>  
            <td>  
                @Html.DisplayFor(modelItem => item.employeaddress)  
            </td>  
            <td>  
                @Html.DisplayFor(modelItem => item.employeemailid)  
            </td>  
            <td>  
                @Html.ActionLink("Edit", "Edit", new { id=item.id }) |  
                @Html.ActionLink("Details", "Details", new { id=item.id }) |  
                @Html.ActionLink("Delete", "Delete", new { id=item.id })  
            </td>  
        </tr>  
    }  
      
    </table>   

نوبت به ساخت ویو ویرایش  می رسد:



    @model crudoperation_linq.Models.employe  
      
    @Scripts.Render("~/bundles/jquery")  
    @Scripts.Render("~/bundles/jqueryval")  
      
      
    @using (Html.BeginForm())  
    {  
        @Html.AntiForgeryToken()  
          
        <div class="form-horizontal">  
            <h4>employe</h4>  
            <hr />  
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })  
            @Html.HiddenFor(model => model.id)  
      
            <div class="form-group">  
                @Html.LabelFor(model => model.employename, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employename, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employename, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                @Html.LabelFor(model => model.employeaddress, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employeaddress, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employeaddress, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                @Html.LabelFor(model => model.employeemailid, htmlAttributes: new { @class = "control-label col-md-2" })  
                <div class="col-md-10">  
                    @Html.EditorFor(model => model.employeemailid, new { htmlAttributes = new { @class = "form-control" } })  
                    @Html.ValidationMessageFor(model => model.employeemailid, "", new { @class = "text-danger" })  
                </div>  
            </div>  
      
            <div class="form-group">  
                <div class="col-md-offset-2 col-md-10">  
                    <input type="submit" value="Save" class="btn btn-default" />  
                </div>  
            </div>  
        </div>  
    }  
      
    <div>  
        @Html.ActionLink("Back to List", "Index")  
    </div>   

حال باید ویو مربوط به نمایش جزئیات را بسازیم:



    @model crudoperation_linq.Models.employe  
      
    <div>  
        <h4>employe</h4>  
        <hr />  
        <dl class="dl-horizontal">  
            <dt>  
                @Html.DisplayNameFor(model => model.employename)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employename)  
            </dd>  
      
            <dt>  
                @Html.DisplayNameFor(model => model.employeaddress)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employeaddress)  
            </dd>  
      
            <dt>  
                @Html.DisplayNameFor(model => model.employeemailid)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employeemailid)  
            </dd>  
      
        </dl>  
    </div>  
    <p>  
        @Html.ActionLink("Edit", "Edit", new { id = Model.id }) |  
        @Html.ActionLink("Back to List", "Index")  
    </p>   

و در آخر ساخت ویو حذف می ماند:



    @model crudoperation_linq.Models.employe  
      
    <h3>Are you sure you want to delete this?</h3>  
    <div>  
        <h4>employe</h4>  
        <hr />  
        <dl class="dl-horizontal">  
            <dt>  
                @Html.DisplayNameFor(model => model.employename)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employename)  
            </dd>  
      
            <dt>  
                @Html.DisplayNameFor(model => model.employeaddress)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employeaddress)  
            </dd>  
      
            <dt>  
                @Html.DisplayNameFor(model => model.employeemailid)  
            </dt>  
      
            <dd>  
                @Html.DisplayFor(model => model.employeemailid)  
            </dd>  
      
        </dl>  
      
        @using (Html.BeginForm()) {  
            @Html.AntiForgeryToken()  
      
            <div class="form-actions no-color">  
                <input type="submit" value="Delete" class="btn btn-default" /> |  
                @Html.ActionLink("Back to List", "Index")  
            </div>  
        }  
    </div>