نحوه افزودن، ویرایش و حذف اطلاعات با Entity framework در MVC

چهارشنبه 13 اردیبهشت 1396

در این مقاله نحوه افزودن، ویرایش و حذف اطلاعات به کمک entity framework در دیتابیس آموزش داده شده است. در این آموزش از روش database first استفاده شده است و به صورت گام به گام نحوه ساخت دیتابیس، ساخت موجودیت ها و در آخر هم توابع افزودن و ویرایش و حذف به کمک entity framework آموزش داده خواهد شد.

 نحوه افزودن، ویرایش و حذف اطلاعات با Entity framework در MVC

مرحله 1: ابتدا با ساخت یک table در دیتابیس کار را شروع می کنیم. در اینجا یک table با نام Student میسازیم.

CREATE TABLE [dbo].[Student](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Age] [int] NULL,
    [Email] [nvarchar](50) NULL,
 CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

مرحله 2: یک سایت asp .net جدید می سازیم.

مرحله 3: در داخل solution explorer روی نام سایت راست کلیک کرده و گزینه Add و پس از آن گزینه Add new Item را انتخاب کنید.

مرحله 4: از لیست نمایش داده شده گزینه ADO.Net Entity Data Model را انتخاب کنید.

 پس از کلیک کردن روی Next شما با یک پیغام خطا مواجه می شوید و روی گزینه Yes کلیک کنید.


مرحله 5: گزینه generate from database را انتخاب کرده و سپس next را بزنید. 


مرحله 6: روی New Connection کلیک کنید.


مرحله 7: اطلاعات دیتابیس را وارد کنید و سپس روی ok کلیک کنید.

مرحله 8: بعد از کلیک کردن روی Ok، یک پنجره جدید باز می شود که در اینجا connection string که در مرحله قبل ساخته شده بود را نمایش می دهد، درضمن در اینجا می توانید نام connection string را عوض کنید.

مرحله 9: در این مرحله می توانید Table ها و View ها و Stored Procedure ها و توابعی که قصد دارید به برنامه اضافه شوند را انتخاب کنید.

روی Finish کلیک کنید. پس از پایان مراحل بالا، فایل های زیر در پروژه شما اضافه خواهد شد که در solution explorer آنها را می توانید مشاهده کنید.

اکنون دیتابیس به صورت کاملا موفقیت آمیزی به پروژه افزوده شد، حالا وقت بررسی نحوه افزودن، ویرایش و حذف اطلاعات در دیتابیس است.

یک صفحه جدید در وبسایت اضافه کنید و کدهای HTML زیر را به آن اضافه کنید.

<table>
            <tbody><tr>
                <td colspan="2">
                    <%-------- Label to print messages ------%>
                    <asp:label forecolor="Green" font-size="Large" id="Label1" runat="server"></asp:label></td>
            </tr>
            <tr>
                <td><b>Name</b></td>
                <td>
                    <asp:textbox runat="server" cssclass="form-control" id="TextBox1"></asp:textbox></td>
            </tr>
            <tr>
                <td><b>Email</b></td>
                <td>
                    <asp:textbox runat="server" cssclass="form-control" id="TextBox2"></asp:textbox></td>
            </tr>
            <tr>
                <td><b>Age</b></td>
                <td>
                    <asp:textbox runat="server" cssclass="form-control" id="TextBox3"></asp:textbox></td>
            </tr>
            <tr>
                <td> </td>
                <td>
                    <asp:button onclick="btnSave_Click" cssclass="btn btn-primary" text="Save" id="Button1" runat="server">
 
                    <asp:button onclick="btnUpdate_Click" cssclass="btn btn-success" text="Update" id="Button2" runat="server">
                </asp:button></asp:button></td>
            </tr>
        </tbody></table>

 رخداد کلیک برای کلید ذخیره

protected void btnSave_Click(object sender, EventArgs e)
   {
       //---- Create object of our entities class.
       using (ForTestingEntities context = new ForTestingEntities())
       {
           //--- Create object of student class.
           Student obj = new Student();
 
           //--- Add values to object.
           obj.Name = txtName.Text;
           obj.Email = txtEmail.Text;
           obj.Age = Convert.ToInt32(txtAge.Text);
 
           //--- Save values to database.
           context.Students.Add(obj);
           context.SaveChanges();
       }
 
       //--- Bind data to repeater.
       bindStudentInfo();
 
       //--- Show confirmation message in label.
       lblInfoMessage.Text = "Record successfully saved.";
 
       //--- Clear text from textboxes
       clearFormFields();
        
   }

تابع ClearFormFields 

public void clearFormFields()
  {
      txtAge.Text = string.Empty;
      txtEmail.Text = string.Empty;
      txtName.Text = string.Empty;
  }

ساخت یک کنترل repeater

<asp:repeater id="repStudentInfo" runat="server" onitemcommand="repStudentInfo_ItemCommand">
                <itemtemplate>
                    </itemtemplate></asp:repeater><table class="table-striped" style="width: 400px; margin-left: 400px;">
            <tbody><tr>
                <td><b>Sno</b></td>
                <td><b>Name</b></td>
                <td><b>Email</b></td>
                <td><b>Age</b></td>
                <td><b>Actions</b></td>
            </tr>
            <tr>
                        <td><%#Container.ItemIndex+1%></td>
                        <td><%#Eval("Name") %></td>
                        <td><%#Eval("Email") %></td>
                        <td><%#Eval("Age") %></td>
                        <td>
                            <asp:linkbutton text="Edit" id="lnkBtnEdit" commandname="Edit" commandargument="<%#Eval("Id") %>" runat="server">
                            <asp:linkbutton text="Delete" id="lnkBtnDelete" commandname="Delete" commandargument="<%#Eval("Id") %>" runat="server">
                        </asp:linkbutton></asp:linkbutton></td>
                    </tr>
                 
             
        </tbody></table>

تابع bindStudentInfo

public void bindStudentInfo()
    {
        //---- Create object of our entities class.
        using (ForTestingEntities context = new ForTestingEntities())
        {
            repStudentInfo.DataSource = (from r in context.Students select r).ToList();
            repStudentInfo.DataBind();
        }
    }

توابع حذف و ویرایش

ما توابع حذف و ویرایش را در داخل Itemcommand کنترل repeater پیاده سازی می کنیم.

protected void repStudentInfo_ItemCommand(object source, RepeaterCommandEventArgs e)
   {
       //-- Get id of the selected id from command argument property.
       int id = Convert.ToInt32(e.CommandArgument);
 
       //--- Delete operation
       if (e.CommandName == "Delete")
       {
           using (ForTestingEntities context = new ForTestingEntities())
           {
               //--- get information of selected record in student object.
               Student obj = context.Students.FirstOrDefault(r => r.Id == id);
 
               //--- Remove record
               context.Students.Remove(obj);
               context.SaveChanges();
 
               //-- Rebind repeater with updated data
               bindStudentInfo();
 
           }
       }
       //--- Edit record. We bind values to textboxex
       else if (e.CommandName == "Edit")
       {
           //--- save id into viewstate to use later during update process.
           ViewState["selectedRec"] = id.ToString();
 
           using (ForTestingEntities context = new ForTestingEntities())
           {
               //--- get information of selected record in student object.
               Student obj = context.Students.FirstOrDefault(r => r.Id == id);
 
               //--- Insert values into textboxes.
               txtAge.Text = obj.Age.ToString();
               txtName.Text = obj.Name;
               txtEmail.Text = obj.Email;
           }
       }
   }

رخداد کلیک برای کلید ویرایش

protected void btnUpdate_Click(object sender, EventArgs e)
   {
       using (ForTestingEntities context = new ForTestingEntities())
       {
           //--- get id of selected record. we have saved it in view state during edit process.
           int id = Convert.ToInt32(ViewState["selectedRec"]);
 
           //--- get information of selected record in student object.
           Student obj = context.Students.FirstOrDefault(r => r.Id == id);
 
           //--- update object with new information.
           //--- Add values to object.
           obj.Name = txtName.Text;
           obj.Email = txtEmail.Text;
           obj.Age = Convert.ToInt32(txtAge.Text);
 
           //--- Update values.
           context.SaveChanges();
 
       }
 
       //--- Bind data to repeater.
       bindStudentInfo();
 
       //--- Show confirmation message in label.
       lblInfoMessage.Text = "Record successfully updated.";
 
       //--- Clear text from textboxes
       clearFormFields();
   }

نمایش داده ها در داخل repeater در هنگام لود صفحه با استفاده از متد Page_Load صفحه

if (!Page.IsPostBack)
        {
            bindStudentInfo();
        }

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

آموزش asp.net mvc

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

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

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

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

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