خانه / برنامه نویسی / آموزش ASP.NET MVC برای مبتدیان-جلسه ششم-دسترسی به داده ها از طریق Entity Framework

آموزش ASP.NET MVC برای مبتدیان-جلسه ششم-دسترسی به داده ها از طریق Entity Framework

اگر به یاد داشته باشید در قسمت قبل در رابطه با Models در MVC صحبت کردیم و برای نمایش اطلاعات یک کارمند از هارد کد استفاده کردیم و به بانک اطلاعاتی وصل نشدیم، در این قسمت درباره دسترسی به داده ها از طریق Entity Framework صحبت میکنیم لطفا قبل از مطالعه این قسمت بخش های قبلی که در زیر لینک اونها رو مشاهده میکنید مطالعه کنید.

قسمت های قبلی آموزش ASP.NET MVC :

آموزش ASP.NET MVC برای مبتدیان – مقدمه

آموزش ASP.NET MVC برای مبتدیان-جلسه اول

آموزش ASP.NET MVC برای مبتدیان-جلسه دوم

آموزش ASP.NET MVC برای مبتدیان-جلسه سوم

آموزش ASP.NET MVC برای مبتدیان-جلسه چهارم

آموزش ASP.NET MVC برای مبتدیان-جلسه پنجم

همونطور که قبلا هم صحبت کردیم کنترلر به URL پاسخ میده به صورتی که اطلاعات رو از مدل میگیره و اونها رو مدیریت میکنه و سپس به ویو میده تا ویو اطلاعات رو رندر کنه و به شکلی در بیاره که برای کاربر قابل فهم باشه.به عنوان مثال آدرس Http://MySite.Com/Employee/Kamran رو از مرورگر میخونه و رکورد مربوط به Kamran رو از بانک اطلاعاتی میخونه و به ویو میفرسته و ویو هم اطلاعات پاس داده شده رو به صورت قابل فهم (قرار دادن در جدول و شکل و رنگ داده شده) در میاره و به کاربر نمایش میده.

اگر به خاطر داشته باشید در قسمت قبل مدلی از Employee رو به صورت زیر درست کردیم :

public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
    }

که این مدل در پوشه ی Models قرار داشت و درون این مدل پراپرتی هایی رو معرفی کرده بودیم.همچنین کنترلر EmployeeController که در پوشه Controllers قرار دارد اطلاعات یک کارمند رو به ویو فرستادیم البته در نظر داشته باشید که در قسمت قبل از بانک اطلاعاتی استفاده نکردیم ولی همونطور که گفته شد در واقعیت باید این اطلاعات از بانک اطلاعاتی گرفته شود.

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

USE [MVCDemo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblEmployee](
	[EmployeeId] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Gender] [nvarchar](50) NULL,
	[City] [nvarchar](50) NULL,
 CONSTRAINT [PK_tblEmployee] PRIMARY KEY CLUSTERED 
(
	[EmployeeId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

قراره اطلاعات کارمند رو از این جدول واکشی کنیم و سپس اطلاعات واکشی شده رو به ویو پاس بدیم و ویو اطلاعات رو رندر میکنه و به کاربر نمایش میده، در حقیقت همون کار قسمت قبل رو باید انجام بدیم فقط بجای استفاده از هاردکد دسترسی به داده ها از طریق Entity Framework رو انجام میدیم و از بانک اطلاعاتی اطلاعات رو میخونیم.در آموزشات بعدی درباره ی Bussiness Object ها به عنوان مدل بحث خواهیم کرد.

ابتدا برای دسترسی به داده ها از طریق Entity Framework ابتدا Entity Framework رو نصب میکنیم که راحت ترین راه استفاده از Nuget Package Manager هست. برای این کار وارد Visual Studio بشید و از منوی Tools گزینه ی Library Package Manager و سپس Manage NuGet Packages for Solution رو انتخاب کنید، در این پنجره تمام بسته های آماده رو میبینید در قسمت بالا سمت راست عبارت Entityframework رو تایپ میکنیم تا جست و جو شروع بشه، در لیستی که برای ما میاره بسته ی Entity Framework رو نصب میکنیم بعد از نصب بسته در قسمت References باید یک رفرنس به Entity Framework داسته باشیم.

در مرحله بعد باید کلاس EmployeeContext رو در پوشه ی Models درست کنیم.برای این کار روی پوشه ی Models کلیک راست کرده و از منوی Add گزینه ی Class رو انتخاب کنید و نام EmployeeContext رو بهش بدید و کلاس رو بسازید.کدهای داخل کلاس رو به صورت زیر تغییر بدید :

namespace MVCDemo.Models
{
    public class EmployeeContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; } 
    }
}

دقت کنید این کلاس از کلاس دیگری به نام DbContext ارث بری میکند این کلاس در فضای نام System.Data.Entity قرار دارد پس یک Using در بالای صفحه به این فضای نام باید بدهیم. هدف این کلاس (EmployeeContext) در اصل ایجاد اتصال با بانک اطلاعاتی ما است.به محتوی کلاس نگاه کنید، یک پراپرتی به نام Employees دارد که یک DbSet از Employee رو برمیگردونه، پس برای برگردوندن اطلاعات موجود در جدول tblEmployee از کلاس پراپرتی Employees در کلاس EmployeeContext باید استفاده کنیم.

در مرحله بعد باید کانکشن یا همون رشته اتصال در فایل Web.Config موجود در ریشه اصلی رو درست کنیم تا از طریق این رشته اتصال کلاس EmployeeContext با بانک اطلاعاتی ارتباط برقرار کنه، این رشته اتصال رو در تگ configuration اضافه میکنیم :

  <connectionStrings>
    <add name="EmployeeContext" connectionString="server=.; database=MVCDemo; integrated security=SSPI" providerName="System.Data.SqlClient"/>
  </connectionStrings>

به نام کانکشن دقت کنید هم نام با کلاس EmployeeContext است.

در مرحله چهارم باید مدل Employee رو با استفاده از خواصیت “Table” به جدول tblEmployee در بانک اطلاعاتی مپ کنیم، یعنی به برنامه بگوییم هرزمان که از کلاس Employee استفاده کردم منظورم همان جدول tblEmployee است، زیرا در حالت پیش فرض ابتدا به دنبال جدولی به نام Employee میگردد اما نام جدول ما tblEmployee است، پس نیاز به این مپ کردن داریم و این کار با خاصیت (Attribute) به نام Table انجام میشود.برای این کار هم بالای کلاس Employee در پوشه ی Models خاصیت Table رو اضافه میکنیم به صورت زیر :

  [Table("tblEmployee")]
    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
    }

فضای نام System.ComponentModel.DataAnnotations.Schema هم باید به بالای صفحه اضافه بشه.

مرحله پنجم ایجاد تغییرات در اکشن متد Details در کنترلر EmployeeController که در پوشه ی Controllers ساختیم است، این تغییرات به صورت زیر هستند :

public ActionResult Details(int id)
        {
            EmployeeContext employeecontext = new EmployeeContext();
            Employee employee = employeecontext.Employees.Single(x => x.EmployeeId == id);
            return View(employee);
        }

تغییرات داده شده به این صورت است که ابتدا متغیری به نام id که نوع اینتیجر رو داره به عنوان ورودی به اکشن متد دادیم (که در باره پاس دادن این مقادیر در جلسات قبل صحبت کردیم) که این id همان شماره کارمند مورد نظر است که قرار است اطلاعات موجود در بانک اطلاعاتی اش نمایش داده شود و شی ای از نوع EmployeeContext و Employee درست کردیم و با استفاده از EmployeeContext و Entity Framework رکورد مورد نظر رو واکشی کردیم (در این سری آموزش بنا بر این گذاشته شده که شما با Entity Framework آشنایی دارید، در صورتی که آشنایی ندارید دوره های Entity Framework موجود در سابت رو هم میتونید مطالعه کنید).شی employeecontext اتصال به بانک اطلاعاتی رو برای ما فراهم میکند (همانطور که بالاتر اشاره شد) و کلاس EmployeeContext یک پراپرتی به نام Employees داشت که (با توجه به مطالبی که بالا گفته شد) لیستی از تمام رکوردهای Employee رو برای ما برمیگردونه ولی ما اینجا تمام رکوردها رو نیاز نداریم و فقط رکورد خواسته شده رو میخواهیم نمایش بدیم، پس از id که به این اکشن متد پاس داده شده استفاده میکنیم و با استفاده از شرط در Entity Framework تنها رکورد مورد نظر رو واکشی میکنیم.در این قسمت بشتر تمرکز ما بر روی دسترسی به داده ها از طریق Entity Framework بود.

در مرجله ششم هم کد زیر رو در قسمت Application_Start در فایل Global.asax قرار بدید :

Database.SetInitializer<MVCDemo.Models.EmployeeContext>(null);

حالا این کد چسیت؟

در این مثال ما از قبل بانک اطلاعاتی و جدول و حتی مقادیری رو وارد کردیم، این تابع در زمان اولین اجرای برنامه بانک اطلاعاتی با اطلاعات پیش فرض رو برای ما درست میکنه، ولی به دلیل این که ما از قبل مقادیری رو به صورت پیش فرض وارد کرده بودیم نیازی به این کار نداریم پس مقدار پیش فرض رو null قرار دادیم.

این تمام تغییراتی بود که نیاز داشتیم!

حالا برنامه رو اجرا کنید و آدرس های زیر رو باز کنید (قبل از اجرای برنامه بانک اطلاعاتی رو باز کنید و در جدول tblEmployee مقادیری رو به صورت پیش فرض وارد کنید):

http://localhost/MVCDemo/Employee/Details/1

http://localhost/MVCDemo/Employee/Details/2

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

اگر آموزش این جلسه طولانی و خسته کننده بود بنده رو ببخشید چون مطالب پیوسته بود.

مطلب پیشنهادی

کمپایلر زبان های برنامه نویسی

دانلود کمپایلر زبان های برنامه نویسی

کمپایلر زبان های برنامه نویسی AIDE مخفف محیط یکپارچه توسعه دهندگی اندروید می باشد. با ...

۱۰ دیدگاه

  1. حالا به این خط گیر میده Employee employee = employeecontext.Employees.Single(x => x.EmployeeId == Id);

    {“An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct.”}

    • دوست من سلام.
      این خطایی که شما فرمودید همونطور که نوشته مربوط به کانکشن استرینگ هست، دقت کنید که آیا کانکشن استرینگ شما توی فایل Web.Config درست ست شده است؟ شما اون پرووایدر رو نصب دارید روی سیستم؟ یعنی مثلا اگر کانکشن استرینگ شما برای SQL Server 2008 هست آیا این نرم افزار رو نصب کردید؟

  2. برای من یه خطا میده که مربوط به اینه [Table (“tblEmployee”)]

    Error 1 Attribute ‘Table’ is not valid on this declaration type. It is only valid on ‘class’ declarations. d:\user\47\windows\documents\visual studio 2013\Projects\MvcEntity\MvcEntity\Controllers\EmployeeController.cs 17 10 MvcEntity

  3. ممنون از آموزش خوبتون

  1. بازتاب ها: آموزش ASP.NET MVC برای مبتدیان-FormCollection در MVC

  2. بازتاب ها: آموزش MVC برای مبتدیان-استفاده از ModelBinder بجای FormCollection

  3. بازتاب ها: آموزش ASP.NET MVC برای مبتدیان-واکشی اطلاعات از چند جدول

  4. بازتاب ها: آموزش MVC برای مبتدیان-ساخت لینک با استفاده از ActionLink Helper

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای مشاهده محصولات به قسمت فروشگاه سایت مراجعه نمایید. رد کردن