ایجاد Scaffolding در ASP.Net Core MVC
چهارشنبه 17 خرداد 1396در این مقاله نحوه استفاده از Entityframework Core به شکل Db-First آموزش داده خواهد شد و پس از آن نحوه ساخت کنترلر و View از طریق Scaffold آموزش داده می شود.
مباحث این مقاله
1- مدیریت Packageها
2- EF Core Model(DB-First)
3- MVC Core Scaffolding
ابتدا یک پروژه جدید می سازیم.( File > New > Project)
از منوی سمت چپ .Net Core را انتخاب کرده و سپس گزینه ASP.Net Core Web Application را انتخاب کنید.
گزینه Web Application را انتخاب کرده و OK را بزنید.
پس از تایید مرحله قبل پروژه باز می شود و solution explorer به شکل زیر خواهد بود.
یک دیتابیس جدید با نام PhoneBook بسازید و جدول های داخل دیتابیس را به وسیله query زیر در دیتابیس اضافه کنید.
USE [PhoneBook] GO /****** Object: Table [dbo].[Contacts] Script Date: 12/9/2016 2:47:49 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Contacts]( [ContactID] [int] IDENTITY(1,1) NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [Phone] [nvarchar](50) NULL, [Email] [nvarchar](50) NULL, CONSTRAINT [PK_Contacts] PRIMARY KEY CLUSTERED ( [ContactID] 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 Core
Entity Framework (EF) Core یک تکنولوژی برای دسترسی به داده ها است که برای برنامه های چند سکویی مورد استفاده قرار می گیرد. فایل project.json را باز کنید و بسته هایی که در زیر آمده را در بخش Dependency و Tools اضافه کنید.
Dependency Package
//Database Provider for EF Core "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1", //EF Core Package Manager Console Tools "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", //EF Core Funtionality for MSSQL Server "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1"
Tools
//Access Command Tools EF Core "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
EntityFrameworkCore.SqlServer – تامین کننده دیتابیس، این بسته به Entity Framework Core اجازه می دهد که بتواند با Microsoft SQL Server کار کند.
EntityFrameworkCore.SqlServer.Design – این بسته به Entity Framework Core اجازه می دهد که از قابلیت هایش مثل EF Core Migration در Microsoft SQL Server استفاده کند.
EntityFrameworkCore.Tools – یک ابزار Command line برای EF Core که شامل دستورهای زیر است
برای Package Manager Console
1-Scaffold-DbContext
2-Add-Migration
3-Update-Database
برای Command Window
dotnet ef dbcontext scaffold
در این بخش با استفاده از command line، به اجرای چند دستور در برنامه می پردازیم.
به دایرکتوری پروژه بروید و کلید Shift را نگه دارید و راست کلیک کنید وCommand window را باز کنید.
Command
dotnet ef –help
Command
dotnet ef dbcontext scaffold "Server=DESKTOP-5B67SHH;Database=PhoneBook;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models
در solution explorer می بینیم که در داخل فولدر Model فایل های داخل دیتابیس ساخته شده اند.
کلاس PhoneBookContext به شکل زیر ساخته شده است.
public partial class PhoneBookContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseSqlServer(@"Server=DESKTOP-5B67SHH;Database=PhoneBook;Trusted_Connection=True;"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Contacts>(entity => { entity.HasKey(e => e.ContactId) .HasName("PK_Contacts"); entity.Property(e => e.ContactId).HasColumnName("ContactID"); entity.Property(e => e.Email).HasMaxLength(50); entity.Property(e => e.FirstName).HasMaxLength(50); entity.Property(e => e.LastName).HasMaxLength(50); entity.Property(e => e.Phone).HasMaxLength(50); }); } public virtual DbSet<Contacts> Contacts { get; set; } }
آموزش Scaffold در ASP.Net MVC Core
در ورژن های قبلی .Net از امکان scaffold استفاده می کردیم، این قابلیت در .Net Core نیز موجود است، فقط استفاده از آن برای بار اول شاید یک مقدار پیچیده به نظر بیاید. فایل project.json را باز کرده و بسته های زیر را به آن اضافه کنید.
Dependency Package
//Code Generators Package Generate Controller,Views "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.0.0-preview2-final", "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview2-final"
Tools
//Access Command Tools Code Generation "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview2-final"
فایل را ذخیره کنید و بسته ها به صورت اتوماتیک به برنامه اضافه می شوند. پس از نصب بسته ها، حالا وقت استفاده از scaffold برای ساخت کنترلر ها و View ها است.
استفاده از Scaffold به کمک رابط کاربری
روی فولدر کنترلر راست کلیک کرده و پس از انتخاب ADD گزینه New Scaffolding Item را انتخاب کنید.
گزینه مورد نظر برای scaffold را انتخاب کنید.
حالا model و context را مشخص کرده و شرایط View مورد نظر را هم انتخاب کنید و کلید ADD را بزنید تا این فرآیند کامل شود.
پس از مدتی صبر کردن، در داخل solution explorer می توانیم ببینم که view ها ساخته شده اند.
پیام خروجی به شکل زیر خواهد بود.
C:\Program Files\dotnet\dotnet.exe aspnet-codegenerator --project "E:\Documents\Article\ScaffoldingCoreMVC\CoreMVCScaffolding\src\CoreMVCScaffolding" controller --force --controllerName ContactsController --model CoreMVCScaffolding.Models.Contacts --dataContext CoreMVCScaffolding.Models.PhoneBookContext --relativeFolderPath Controllers --controllerNamespace CoreMVCScaffolding.Controllers --useDefaultLayout Finding the generator 'controller'... Running the generator 'controller'... Attempting to compile the application in memory Attempting to figure out the EntityFramework metadata for the model and DbContext: Contacts Added Controller : \Controllers\ContactsController.cs Added View : \Views\Contacts\Create.cshtml Added View : \Views\Contacts\Edit.cshtml Added View : \Views\Contacts\Details.cshtml Added View : \Views\Contacts\Delete.cshtml Added View : \Views\Contacts\Index.cshtml RunTime 00:00:07.87
Scaffold به کمک CommandLine
می توان از طریق CommandLine در پروژه هایمان از Scaffold استفاده کنیم. به دایرکتوری پروژه رفته و کلید Shift را نگه دارید و راست کلیک کنید و command window را انتخاب کنید. برای مشاهده اطلاعات کمکی از دستور زیر استفاده کنید
Command
dotnet aspnet-codegenerator --help
به کمک دستور زیر که شامل آدرس پروژه و اطلاعات model است می توان کنترلر و View را ساخت.
Command
dotnet aspnet-codegenerator --project "E:\Documents\Article\ScaffoldingCoreMVC\CoreMVCScaffolding\src\CoreMVCScaffolding" controller --force --controllerName ContactsController --model CoreMVCScaffolding.Models.Contacts --dataContext CoreMVCScaffolding.Models.PhoneBookContext --relativeFolderPath Controllers --controllerNamespace CoreMVCScaffolding.Controllers –useDefaultLayout
همانطور که مشخص است، کنترلر و View از روی model ساخته شد. در داخل برنامه در بخش Error List یک اخطار در مورد انتقال اطلاعات حساس از طریق DbContext، نمایش داده می شود
این بخش در DbContext است که باعث ایجاد اخطار بالا شده است.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseSqlServer(@"Server=DESKTOP-5B67SHH;Database=PhoneBook;Trusted_Connection=True;"); }
این بخش را کامنت کنید و در داخل کلاس startup یک سرویس بسازید که اطلاعات connectionstring برای دسترسی به DbContext را نگه داری کند.
//This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); var connection = @"Server=DESKTOP-5B67SHH;Database=PhoneBook;Trusted_Connection=True;"; services.AddDbContext<PhoneBookContext>(options => options.UseSqlServer(connection)); }
اگر بخواهیم پروژه را اجرا کنیم، برنامه ارور می دهد و اجرا نمی شود، توضیحات ارور در پایین آمده است.
InvalidOperationException: No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.
این خطا بیان می کند که هیچ تامین کننده دیتابیسی برای این DbContext تنظیم نشده است. توجه کنید که ما از AddDbContext در داخل متد ConfigureServices(IServiceCollection services) استفاده کرده ایم.
services.AddDbContext<PhoneBookContext>(options => options.UseSqlServer(connection));
اما آن را به DbContext نفرستادیم، ما نیاز داریم که از سازنده زیر برای ارسال به سازنده اصلی DbContext استفاده کنیم.
public PhoneBookContext(DbContextOptions<PhoneBookContext> options) : base(options) { }
حالا ما می توانیم به کمک دکمه های Ctrl+f5 برنامه را اجرا کنیم یا که به کمک دستور زیر برنامه را اجرا کنیم.
Command
dotnet run
مرورگر را باز کرده و آدرس http://localhost:5000 را وارد کنید. برنامه در حال اجرا را خواهید دید.
عکسهای خروجی
آموزش asp.net mvc
- ASP.net MVC
- 3k بازدید
- 5 تشکر