"> Entity Framework Database First در ASP.NET Core |ام اس پی سافت

Entity Framework Database First در ASP.NET Core

Database First

در این مقاله، نحوه ی پیکربندی و بکارگیری متد Database First مربوط به Entity Framework در یک برنامه ی ASP.NET Core را خواهید آموخت.

این مقاله، عناوین زیر را پوشش می دهد:

  •  راه اندازی Entity Framework Database First
  •  کار با ViewModel
  •  نمایش فهرستی از Employeeها از یک پایگاه داده

راه اندازی و کار با Entity Framework Database First

رویکرد Database First مربوط به Entity Framework توسعه دهندگان را قادر می سازد تا برنامه های نرم افزاری را از پایگاه داده های موجود خود بسازند.

شما به یک پایگاه داده ی موجود متصل می شوید و Visual Studio و EF یک مدل شیء داده ای و برنامه ی کامل را با کد بسیار کمی برای شما می سازد.

بیایید برخی مفاهیم مورد استفاده در رویکرد database first را بررسی کنیم.

Entity Framework Database First

در این آموزش، برنامه ای خواهیم ساخت که داده های Employee را از یک پایگاه داده آورده و آن ها را در یک صفحه نمایش خواهد داد، مشابه این شکل.

Database First

برای این هدف، نیاز است دو پایگاه داده ایجاد کنیم و UI  حاصل، داده های زیر را نمایش خواهد داد:

database

 ایجاد جداول پایگاه داده

ابتدا، دو جدول پایگاه داده ایجاد می کنیم، tblMembers و tblSkills. این جداول، جزئیات و مهارت های کارمندان را ذخیره می کنند.

می توانید پایگاه داده ای جدید در SQL Server ایجاد کرده یا این جداول را به یک پایگاه داده ی موجود اضافه کنید.

اسکریپت های زیر این جداول پایگاه داده را ایجاد خواهند کرد.

اگر می خواهید از پایگاه داده ی موجود خود استفاده کنید، می توانید از این مرحله عبور کنید.

CREATE TABLE [dbo].[tblEmployees](  
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL,  
    [EmployeeName] [varchar](50) NULL,  
    [PhoneNumber] [varchar](50) NULL,  
    [SkillID] [int] null,  
    [YearsExperience] [int] null,  
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]  
CREATE TABLE [dbo].[tblSkills](  
    [SkillID] [int] IDENTITY(1,1) NOT NULL,  
    [Title] [varchar](50) NULL,  
PRIMARY KEY CLUSTERED   
(  
    [SkillID] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY]  

اکنون، بیایید تعدادی داده ی آزمایشی به جداول پایگاه داده ی خود اضافه کنیم. اسکریپت های زیر داده ها را در جداول پایگاه داده ی ما درج می کنند.

insert into tblSkills
(Title) values('Visual Foxpro')
insert into tblSkills
(Title) values('C#')
insert into tblSkills
(Title) values('VB.NET')
insert into tblSkills
(Title) values('Delphi')
insert into tblSkills
(Title) values('Java')
insert into tblSkills
(Title) values('Power Builder')
insert into tblSkills
(Title) values('COBOL')
insert into tblSkills
(Title) values('Python')

Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Suhana Kalla','9869569634',2,'11')
Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Ashish Kalla','9869166077',8,'14')
Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Manoj Kalla','9869569634',1,'24')
Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Nirupama Kalla','9969359746',6,'20')
Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Rajesh Bohra','9869166012',7,'28')
Insert Into tblEmployees
(EmployeeName,PhoneNumber,SkillID,YearsExperience)
values ('Murli Vyas','9261166012',5,'18')

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

Database First

 

Database table

ایجاد یک Web Application

حال، بیایید یک ASP.NET Core Web Application با استفاده از Visual Studio ایجاد کنیم.

ما Visual C# > .NET Core > ASP.NET Core Web Application را انتخاب کرده ایم.

نامی به پروژه اختصاص داده و مسیری برای آن انتخاب کنید. در این مورد، ما به ترتیب EmployeeList-EF-DbFirst و d:\MBK را داریم.

Database First

در صفحه ی بعد، از انتخاب .NET Core و ASP.NET Core 2.0 و Web Application اطمینان حاصل کنید.

ASP.NET Core 2.0 و Web Application

برای ایجاد پروژه، دکمهcی OK را بفشارید.

نمای ساختار پروژه، ایجاد پوشه ها

View پیش فرض پروژه مشابه شکل زیر می باشد:

Database First

حال، سه پوشه جهت پشتیبانی از معماری MVC اضافه می کنیم.

  •  Models
  • Views
  • Controllers

به Solution Explorer رفته و بر روی نام پروژه راست کلیک کنید و گزینه ی Add –> New Folder را انتخاب کنید.

مراحل فوق دو بار دیگر برای افزودن سه پوشه تکرار می شوند: Models، Views، و Controllers.

New Folder

تنظیم Connection، ایجاد Modelها، کلاس ها

چگونه می توان Connection Stringها را در Asp.Net Core تنظیم کرد؟

می توانید یک رشته ی اتصال را درون فایل appsettings.json تنظیم کنید.

کد appsettings.json

{  
  "Logging": {  
    "IncludeScopes": false,  
    "LogLevel": {  
      "Default": "Warning"  
    }  
  },  
  "ConnectionStrings": {  
    "MbkDbConstr": "Data Source=(localdb)\\MBK;Database=MbkTest;"  
  }  
}  

ایجاد Modelها
مدل های زیر را ایجاد می کنیم:

Model

اکنون جهت افزودن کلاسی به نام EMPLOYEECONTEXT بر روی پوشه ی Models راست کلیک کنید.

EMPLOYEECONTEXT

پس از راست کلیک بر روی پوشه ی Models، فهرست گزینه های فوق نمایان خواهد شد.

ADD NEW ITEM

در فهرست آیتم ها Class را انتخاب کرده و نام آن را EmployeeContext بگذارید.

Database First

در فهرست آیتم ها Class را انتخاب کرده و نام آن را tblEmployee قرار دهید.

tblEmployee

در فهرست آیتم ها Class را انتخاب کرده و آن را tblSkill نامگذاری کنید.

tblSkill

در فهرست آیتم ها Class را انتخاب کرده و آن را EmployeeViewModel بنامید.

حال جهت تعریف برخی ویژگی ها در کلاس، بر روی فایل EmployeeViewModel.cs جفت کلیک کنید.

این ها با ستون های جدول پایگاه داده ی ما منطبق خواهند شد.

ما در حال ایجاد یک مدل View برای نمایش و ایجاد ویژگی ها به ازای هر نمای مورد نیاز هستیم.

تصویر OUR TASK ما را مشاهده کنید.

ابتدا فضای نام زیر را در کلاس اضافه کنید.

using System.ComponentModel.DataAnnotations;

کد EmployeeViewModel.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using System.ComponentModel.DataAnnotations;  
  
namespace EmployeeList_EF_DbFirst.Models  
{  
    public class EmployeeViewModel  
{  
[Key]  
        public int EmployeeID { get; set; }  
  
        public string EmployeeName { get; set; }  
  
        public string PhoneNumber { get; set; }  
  
        public string Skill { get; set; }  
  
        public int YearsExperience { get; set; }  
    }  
}  

ویژگی های EmployeeViewModel.

اکنون جهت تعریف ویژگی های فایل tblEmployee.cs بر روی آن جفت کلیک کنید.

ابتدا فضای نام زیر را به کلاس اضافه کنید.

using System.ComponentModel.DataAnnotations;

کد tblEmployee.cs

using System;  
using System.Collections.Generic;  
using System.ComponentModel.DataAnnotations;  
using System.Linq;  
using System.Threading.Tasks;  
  
namespace EmployeeList_EF_DbFirst.Models  
{  
    public class tblEmployee  
   {  
    [Key]  
    public int EmployeeID { get; set; }  
  
    [Display(Name = "Employee Name")]  
    public string EmployeeName { get; set; }  
  
    [Display(Name = "Contact Number")]  
    public string PhoneNumber { get; set; }  
  
    [Display(Name = "Your Skill")]  
    public int SkillID { get; set; }  
  
    [Display(Name = "Years of Experience")]  
    public int YearsExperience { get; set; }  
   }  
}  

خاصیت های KEY و Display کدامند؟

KEY و Display

حال، جهت تعریف ویژگی های فایل tblSkills.cs، بر روی آن جفت کلیک کنید.

ابتدا فضای نام زیر را به کلاس اضافه کنید.

using System.ComponentModel.DataAnnotations;

کد tblSkills.cs

using System;  
using System.Collections.Generic;  
using System.ComponentModel.DataAnnotations;  
using System.Linq;  
using System.Threading.Tasks;  
  
namespace EmployeeList_EF_DbFirst.Models  
{  
    public class tblSkill  
   {  
    [Key]  
    public int SkillID { get; set; }  
  
    [Display(Name = "Type of Skill")]  
    public string Title { get; set; }  
   }  
}  

اکنون برای تعریف ویژگی های فایل EmployeeContext.cs بر روی آن جفت کلیک کنید.

ابتدا فضای نام زیر را به کلاس اضافه کنید.

using Microsoft.EntityFrameworkCore;

کد EmployeeContext.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.EntityFrameworkCore;  
  
namespace EmployeeList_EF_DbFirst.Models  
{  
    public class EmployeeContext : DbContext  
    {  
        public EmployeeContext(DbContextOptions<EmployeeContext> options) : base(options)  
        {  
  
        }  
        public DbSet<tblSkill> tblSkills { get; set; }  
        public DbSet<tblEmployee> tblEmployees { get; set; }  
    }  
} 

جهت اطلاع بیشتر در رابطه با کلاس DbSet، از اینجا دیدن فرمایید.

تنظیم کلاس Startup

بر روی Startup.cs، که در فایل اصلی پوشه واقع شده، جفت کلیک کنید.

فضای نام های زیر را اضافه کنید:

using Microsoft.EntityFrameworkCore;
using EmployeeList_EF_DbFirst.Models;

فضای نام های فوق جهت دسترسی به مدل ها از پوشه ی Models استفاده می شوند.

برای اطلاع بیشتر از جزئیات فضای نام Microsoft.EntityFrameworkCore، از اینجا دیدن فرمایید.

کد Startup.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.AspNetCore.Builder;  
using Microsoft.AspNetCore.Hosting;  
using Microsoft.Extensions.Configuration;  
using Microsoft.Extensions.DependencyInjection;  
using Microsoft.EntityFrameworkCore;  
using EmployeeList_EF_DbFirst.Models;  
  
namespace EmployeeList_EF_DbFirst  
{  
    public class Startup  
    {  
        public Startup(IConfiguration configuration)  
        {  
            Configuration = configuration;  
        }  
  
        public IConfiguration Configuration { get; }  
  
        // This method gets called by the runtime. Use this method to add services to the container.  
        public void ConfigureServices(IServiceCollection services)  
        {  
            services.AddMvc();  
              
            //Fetching Connection string from APPSETTINGS.JSON  
            var ConnectionString = Configuration.GetConnectionString("MbkDbConstr");  
  
            //Entity Framework  
            services.AddDbContext<EmployeeContext>(options => options.UseSqlServer(ConnectionString));  
        }  
  
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
        {  
            if (env.IsDevelopment())  
            {  
                app.UseDeveloperExceptionPage();  
                app.UseBrowserLink();  
            }  
            else  
            {  
                app.UseExceptionHandler("/Error");  
            }  
  
            app.UseStaticFiles();  
            app.UseMvcWithDefaultRoute();  
            app.UseMvc(routes =>  
            {  
                routes.MapRoute(  
                    name: "default",  
                    template: "{controller=Home}/{action=Index}/{id?}");  
            });  
        }  
    }  
}  

ایجاد یک کنترل کننده

حال، بر روی پوشه ی Controllers راست کلیک کنید. Add -> New Item را انتخاب نمایید.

New Item

کنترل کننده ای به نام HomeController.cs اضافه کنید. کمی صبر نمایید.

Database First

کد پیش فرض HomeController.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.AspNetCore.Mvc;  
  
namespace EmployeeList_EF_DbFirst.Controllers  
{  
    public class HomeController : Controller  
    {  
        public IActionResult Index()  
        {  
            return View();  
        }  
    }  
}  

اکنون، کلاس HomeController را تغییر خواهیم داد.

فضای نام زیر را اضافه کنید.

using EmployeeList_EF_DbFirst.Models;

فضای نام فوق جهت دسترسی به Models استفاده می شود.

موارد مربوط به Context را اضافه کنید:

private readonly MemberContext_dbcontext;

سازنده ای به کلاس HomeController اضافه کنید:

 public HomeController(EmployeeContext dbContext)  
 {  
            _dbContext = dbContext;  
 }  
  
Index Action method  
 public IActionResult Index()  
 {  
            var _emplst = _dbContext.tblEmployees.  
                            Join(_dbContext.tblSkills, e => e.SkillID, s => s.SkillID,  
                            (e, s) => new EmployeeViewModel  
                            { EmployeeID = e.EmployeeID, EmployeeName = e.EmployeeName,  
                                PhoneNumber = e.PhoneNumber, Skill = s.Title,  
                                YearsExperience = e.YearsExperience }).ToList();  
            IList<EmployeeViewModel> emplst  = _emplst;  
            return View(emplst);  
  }  

کد کامل HomeController.cs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.AspNetCore.Mvc;  
using EmployeeList_EF_DbFirst.Models;  
  
namespace EmployeeList_EF_DbFirst.Controllers  
{  
    public class HomeController : Controller  
    {  
  
        private readonly EmployeeContext _dbContext;  
  
        public HomeController(EmployeeContext dbContext)  
        {  
            _dbContext = dbContext;  
        }  
  
        public IActionResult Index()  
        {  
            var _emplst = _dbContext.tblEmployees.  
                            Join(_dbContext.tblSkills, e => e.SkillID, s => s.SkillID,  
                            (e, s) => new EmployeeViewModel  
                            { EmployeeID = e.EmployeeID, EmployeeName = e.EmployeeName,  
                                PhoneNumber = e.PhoneNumber, Skill = s.Title,  
                                YearsExperience = e.YearsExperience }).ToList();  
            IList<EmployeeViewModel> emplst  = _emplst;  
            return View(emplst);  
        }  
    }  
}  

پیش از ادامه ی کار، بیایید پروژه را بسازیم. مطمئن شوید که هیچ خطای وجود ندارد.

HomeController.cs

حال بیایید یک View اضافه کنیم.

اکنون برای افزودن یک view، بر روی متد Index در کلاس فوق راست کلیک کنید.

view

حال، برای افزودن یک view، مجدد بر روی متد Index راست کلیک کنید.

Index

Database First

فرم فوق را بر اساس کلاس Model و کلاس DatabaseContext خود کامل کنید.

DatabaseContext

پیام NuGet فوق بر روی صفحه ظاهر خواهد شد.

کد Index.cshtml

@model IEnumerable<EmployeeList_EF_DbFirst.Models.EmployeeViewModel>  
  
@{  
    ViewData["Title"] = "Index";  
}  
  

<h2>Index</h2>

  
  


  
    <a asp-action="Create">Create New</a>  


  

<table class="table">  
    
<thead>
  
        
<tr>  
                
<th>  
                    @Html.DisplayNameFor(model => model.EmployeeName)  
                </th>

  
                
<th>  
                    @Html.DisplayNameFor(model => model.PhoneNumber)  
                </th>

  
                
<th>  
                    @Html.DisplayNameFor(model => model.Skill)  
                </th>

  
                
<th>  
                    @Html.DisplayNameFor(model => model.YearsExperience)  
                </th>

  
            
<th></th>

  
        </tr>

  
    </thead>

  
    
<tbody>  
@foreach (var item in Model) {  
        
<tr>  
            
<td>  
                @Html.DisplayFor(modelItem => item.EmployeeName)  
            </td>

  
            
<td>  
                @Html.DisplayFor(modelItem => item.PhoneNumber)  
            </td>

  
            
<td>  
                @Html.DisplayFor(modelItem => item.Skill)  
            </td>

  
            
<td>  
                @Html.DisplayFor(modelItem => item.YearsExperience)  
            </td>

  
            
<td>  
                <a asp-action="Edit" asp-route-id="@item.EmployeeID">Edit</a> |  
                <a asp-action="Details" asp-route-id="@item.EmployeeID">Details</a> |  
                <a asp-action="Delete" asp-route-id="@item.EmployeeID">Delete</a>  
            </td>

  
        </tr>

  
}  
    </tbody>

  
</table>

  

اکنون پوشه ی Pages را از پروژه حذف کنید.

ساخت و اجرا

حال، برای ساخت و اجرای پروژه، کلید F5 را بفشارید. خروجی باید به این شکل باشد:

Database First

کار تمام است. کد نویسی به کام.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

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

کد تخفیف daneshjo-98 با ۵۰٪ تخفیف به مناسبت روز دانشجو