کار با SQL Server LocalDB

در این مقاله قصد داریم در ASP.NET CORE برای ساخت و ویرایش جدول های بانک اطلاعاتی از SQL LocalDB استفاده کنیم و نحوه کار با آن را آموزش دهیم .

کار با SQL Server LocalDB

کلاس ApplicationDbContext برنامه را به بانک اطلاعاتی متصل کرده و Object ها و رکورد های درون بانک اطلاعاتی را مدیریت می کند.در Startup.cs  database Context با تزریق وابستگی سفارشی شده است.

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

سیستم پیکربندی ASP.NET Core رشته اتصال را می خواند. برای کار با محیط Local رشته اتصال را  میتوان در فایل appsettings.json مشاهده کنید .

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MvcMovie-4ae3798a;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "IncludeScopes": false,

هنگامی که شما یک برنامه را آزمایش می کنیم و بر روی سرور قرار  می دهید ، میتوان یک enviroment  variable یا با یک روش دیگر ، رشته اتصال را بر روی یک SQL Server  تنطیم کنید.

SQL Server Express LocalDB

LocalDB یک نسخه سبک از SQL Server است که موتور آن برای توسعه برنامه ها کاربرد دارد .LocalDB توسط کاربر اجرا و درخواست می شود ، بنابراین ،  مجموعه پیکربندی ها در آن قرار دارد . به طور پیش فرض ، پایگاه داده ساخته شده Local با پسوند “.mdf” در مسیر C:/Users/<user>  ایجاد شده است .

از منوی View ، SQL Server Onject Explorer را باز کنید.

بر روی جدول Movie  کلیک راست کرده  و ViewDesigner را انتخاب کنید.

نکته:EF  به طور پیش فرض فیلد ID  را کلیک اصلی قرار می دهد . ایکون کلید کنار ID نشان دهنده کلیک اصلی است.

برروی جدول Movie کلیک راست کرده و View Data را انتخاب کنید .

Seed the database

یک کلاس به نام SeedData در پوشه Models ایجاد می کنیم . کدهای زیر را  وارد کنید:


using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new ApplicationDbContext(
                serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                     new Movie
                     {
                         Title = "When Harry Met Sally",
                         ReleaseDate = DateTime.Parse("1989-1-11"),
                         Genre = "Romantic Comedy",
                         Price = 7.99M
                     },

                     new Movie
                     {
                         Title = "Ghostbusters ",
                         ReleaseDate = DateTime.Parse("1984-3-13"),
                         Genre = "Comedy",
                         Price = 8.99M
                     },

                     new Movie
                     {
                         Title = "Ghostbusters 2",
                         ReleaseDate = DateTime.Parse("1986-2-23"),
                         Genre = "Comedy",
                         Price = 9.99M
                     },

                   new Movie
                   {
                       Title = "Rio Bravo",
                       ReleaseDate = DateTime.Parse("1959-4-15"),
                       Genre = "Western",
                       Price = 3.99M
                   }
                );
                context.SaveChanges();
            }
        }
    }
}

توجه داشته باشید هر فیلدی که در بانک اطلاعاتی قرار داشته باشد ، Return می شود.


if (context.Movie.Any())
{
    return;   // DB has been seeded.
}

Seed initializer  را به به پایان پیکر بندی  درون Startup.cs  اضافه می کنیم:

app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    #endregion

    SeedData.Initialize(app.ApplicationServices);
}
// End of Configure.

آزمایش برنامه

تمام رکورد های پایگاه داده را پاک می کنیم ، شما میتوان این کار را با لینک Delete در مرورگر یا SSOX انجام دهید .

برنامه را مجبور به مقدار دهی اولیه می کنیم ، (متدهای درون Statup  را فراخوانی می کنیم) بنابراین متد seed  اجرا می شود.

برای این کار باید IIS Express را متوقف کنیم و دوباره اجرا کنیم .میتوان با روش های زیر این کار را انجام دهید :

در قسمت notification ویندوز برروی IIS کلیک راست کرده و Exit یا Stop site را انتخاب کنید

اگر ویژوال استودیو را در حالت Debug اجرا نکرده اید با دکمه F5 آن را اجرا کنید .

اگر ویژوال استودیو را در حالت Debug اجرا کرده اید آن را متوقف کرده و دوباره اجرا کنید.

برنامه داده های Seed را نمایش می دهد .

دانلود نسخه ی PDF این مطلب