درج اطلاعات پیش فرض (متد Seed) در بانک اطلاعاتی توسط فریم ورک Entity

دوشنبه 22 تیر 1394

زمانیکه ما کار روی یک برنامه را شروع میکنیم زمان زیادی را صرف ساخت بانک اطلاعاتی و جداول آن می نماییم اما در فریم ورک Entity یک قابلیت مفید وجود دارد و آن ساخت (Create)، بروزرسانی (Update) و قرار دادن بانک اطلاعاتی در حین زمان اجرای برنامه است. در این مقاله با متد Seed آشنا خواهید شد.

درج اطلاعات پیش فرض (متد Seed) در بانک اطلاعاتی توسط فریم ورک Entity

 فریم ورک Entity استفاده از "Database Migrations" را برای جلوگیری از دست دادن بانک ها و رکوردها پیشنهاد می دهد.
 معمولا ما از "Database Migrations" در برنامه های معمولی خود استفاده نمی کنیم و برای این از متد "Seed" استفاده می کنیم. این متد به شما اجازه می دهد که مقداری داده ساختگی برای اهداف تست درون بانک اطلاعاتی پر نماییم. برای پر کردن داده درون بانک اطلاعاتی شما نیاز به ساخت یک custom DB initializer (بانک اطلاعاتی سفارشی) مانند زیر داریم :

DropCreateDatabaseIfModelChanges<DBContext>

CreateDatabaseIfNotExists<DBContext>

DropCreateDatabaseAlways<DBContext>

حالا یک برنامه با متد Seed می سازیم.

مرحله 1 :
یک پروژه جدید winfrom ایجاد می کنیم.

مرحله 2 :

فریم ورک را از طریق nuget manager نصب می کنیم.

مرحله 3 :

یک کلاس با نام Student برای تعریف پارامترها ایجاد می نماییم.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication2
{
    class Student
    {
        public int StudentId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }   
    }
}

مرحله 4 :

یک کلاس دیگر با نام StudentEntity برای معرفی DbContext ایجاد می نماییم.

در اینجا نیاز به "using System.Data.Entity" می باشد.

مرحله 5 :

مقداردهی اولیه بانک اطلاعاتی

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

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication2
{
    internal class StudentDataBaseInitializer : DropCreateDatabaseIfModelChanges<studentEntity>
    {
        protected override void Seed(studentEntity context)
        {
            var students1 = new List<Student>
            {
                new Student
                {
                    FirstName = "بردیا",
                    LastName = "اجاقی"
                },
                new Student
                {
                    FirstName = "علی",
                    LastName = "تمیمی"
                },
                new Student
                {
                    FirstName = "زهرا ",
                    LastName = "چگینی"
                },
                new Student
                {
                    FirstName = "نرگس ",
                    LastName = "محمدی"
                },
                new Student
                {
                    FirstName = "خدیجه",
                    LastName = "قربانی"
                }
            };
            students1.ForEach(s => context.Students.Add(s));
            context.SaveChanges();
        }
    }
}

مرحله 6 :

پر کردن اطلاعات در بانک اطلاعاتی

از خط زیر برای پر کردن اطلاعات در بانک اطلاعاتی استفاده می کنیم :

Database.SetInitializer<studentEntity>(new StudentDataBaseInitializer());  

مرحله 7 :

یک label و button در فرم ساخته و کدهای زیر را در رویداد کلیک دکمه کپی نمایید:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Security.Policy;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (var context = new studentEntity())
            {
                Database.SetInitializer<studentEntity>(new StudentDataBaseInitializer());
                //This is linq query  
                var stdInfo = (from C in context.Students
                    select new
                    {
                        Id = C.StudentId,
                        FirstName = C.FirstName,
                        LastName=C.LastName
                    });
                
                //lblTitle.Text = "0";
                foreach (var info in stdInfo)
                {
                    lblTitle.Text += "ID : " + info.Id + ", Name : " + info.FirstName + ", Family : " + info.LastName + "\n\r";
                }
                
            }
        }


    }
}


آموزش سی شارپ

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

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

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 6 تشکر

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

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