روش Migration در Code First با استفاده از ASP.Net MVC 5

یکشنبه 17 آبان 1394

در این مقاله هدف ما استفاده از migration در entityframework code first می باشد. برای این کار ما از asp.net mvc5 استفاده خواهیم کرد.

روش Migration در Code First با استفاده از ASP.Net MVC 5

در این مقاله هدف ما استفاده از migration در entity code first می باشد. برای این کار ما از asp.net mvc5 استفاده خواهیم  کرد.

ابتدا یک پروژه جدید در ویژوال استودیو ایجاد نمایید.

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

در تصویر بالا همانطور که مشاهده می کنید ما mvc  را به همراه web api  انتخاب میکنیم

خب پروژه ما ایجاد شده و ما میتوانیم در قسمت solution explorer  فایل های ایجاد شده پروژه را ببینیم.

حال به سراغ ایجاد بانک میرویم.

در قسمت server explorer  روی کلید نشان داده شده در تصویر بالا کلیک کنید

با کلیک کردن روی ان تصویر بالا به شما نمایش داده می شود که در انجا نام سرور خود را وارد نمایید. در قسمت select or enter a database name  نامی برای بانک خود انتخاب نمایید. لازم به ذکر است چون ما از روش code first استفاده میکنیم پس بانک ما ایجاد نشده است به خاطر همین فقط نامی که برای بانک در نظر داریم را در اینجا قرار میدهیم.پس از ان پیامی روی صفحه ظاهر می شود. گزینه yes  را انتخاب کنید.

همانطور که در تصویر زیر مشاهده میکنید بانک ما ایجاد شده ست.

برنامه را اجرا کنید در sql server مشاهده خواهید کرد که بانک شما ایجاد شده است.

حالا به سراغ ایجاد یک کلاس model  می رویم.

در اینجا ما 2 کلاس با نام school و student ایجاد میکنیم کد زیر نحوه ایجاد کلاس ها است.

//
// Entity Domain model
//
//Master
public class School
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Student> Students { get; set; }
}

//Details
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public float Age { get; set; }

[ForeignKey("School")]
[Display(Name="School Name")]
public int SchId { get; set; }
public virtual School School { get; set; }
}

کد زیر  رابطه یک به چند بین school  وstudent  را نشان میدهد.

public virtual ICollection Students { get; set; }

کلاس student  دارای یک کلید خارجی است.

[ForeignKey("<master_class_name>")]
[Display(Name="School Name")]
public int SchId { get; set; }
public virtual School School { get; set; } 

ما باید یک کلاس Applicationdbcontex ایجاد کنیم  

using Microsoft.AspNet.Identity.EntityFramework;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace Rakib33_EFCodeFirst.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class.
    public class ApplicationUser : IdentityUser
    {
        public string Description { get; set; }
    }

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("CodeFirstConString")
        {
        }
        public IDbSet<School> Schools { get; set; }
        public IDbSet<Student> Students { get; set; }
    }
  }

شما در web config تنظیمات مربوط به connection string را میتوانید مشاهده کنید.

خب حالا به سراغ کنترلر ها میرویم. برای ایجاد یک کنترلر گزینه mvc 5 controller with view using entity fram work را انتخاب نمایید. کنترلی با نام School ایجاد کنید از قسمت model class مدل خود را انتخاب نمایید. و سپس گزینه Add را کلیک نمایید.

حال اگر بخواهیم در کلاس student تغییری ایجاد کنیم مثلا بخواهیم فیلدی به ان اضافه کنیم مشاهده خواهید کرد که اطلاعات ذخیره شده قبلی از بانک حذف شده و بانک مجدد ایجاد شده است برای حل این مشکل ما از migration  استفاده میکنیم.

public class Student {
       public int Id { get; set; }
       public string Name { get; set; }
       public float Age { get; set; }

       //newly added
       public string Email { get; set; }

       [ForeignKey("School")]
       [Display(Name="School Name")]
       public int SchId { get; set; }
       public virtual School School { get; set; }
    }

خب از منو  tools گزینه Package Manager را انتخاب میکنیم و طبق تصویر زیر enable-migration را مینویسیم و کلید enter را میزنیم تا نصب مایگریشن شروع شود.

پس از نصب خواهید دید که یک کلاس با نام   configuration.cs ایجاد می شود.

public Configuration()
       {
           AutomaticMigrationsEnabled = true;
           AutomaticMigrationDataLossAllowed = false;
           ContextKey = "Rakib33_EFCodeFirst.Models.ApplicationDbContext";
       }

دوباره به PackageConsole بروید و Update-Database –Verbose را تایپ نمایید و کلید اینتر را فشار دهید تا دستور اجرا شود.

همانطور که در تصویر زیر می بینید فیلدی  که ما به کلاس student اضافه کردیم در بانک اضافه میگردد.

همانطور که مشاهده کردید تغییرات در بانک اطلاعاتی به راحتی صورت می پزیرد.

حالا می توانید برنامه را اجرا نمایید.

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

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

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

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

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