מדריך SQLite Entity Framework CodeFirst - Migrations
-
אחרי שבמדריך הקודם EF יצר עבורנו את המסד מתוך הקוד שלנו, כעת נרצה להוסיף מחלקות ומאפיינים חדשים ושגם הם יכנסו למסד
בשביל זה יש את המיגרציה ובאנגלית Migrations.כדי שהמיגרציה תפעל צריך לבצע את השלבים הבאים:
-
מוסיפים לפרייקט את הספריה שמבצעת את המיגרציה, מריצים בקונסולת Nuget את הפקודה הבאה:
Install-Package System.Data.SQLite.EF6.Migrations
-
מריצים את הפקודה הבאה כדי להוסיף לפרוייקט מחלקה האחראית על תצורת המיגרציה
Enable-Migrations
כעת נוסף קובץ Configuration.cs -
משכתבים את הבנאי של המחלקה Configuration כך:
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());
} -
את הקוד משכתבים באופן הבא
using SQLite.CodeFirst;
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SQLite;
using System.IO;namespace SQLiteDemo
{
class Program
{
static private MyDbContext _MyDbContext;static void Main(string[] args) { _MyDbContext = new MyDbContext(); _MyDbContext.People.Load(); } } public class Person { public int Id { get; set; } public int FirstName { get; set; } } public class MyDbContext : DbContext { static MyDbContext() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>(true)); } private static DbConnection GetConnection() { string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "db\\MyDbContextDB.sqlite"); return new SQLiteConnection(string.Format("Data Source={0};Version=3;", filePath)); } public MyDbContext() : base(GetConnection(), false) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<MyDbContext>(modelBuilder); Database.SetInitializer(sqliteConnectionInitializer); } public DbSet<Person> People { get; set; } }
}
-
כעת הכל מוכן כדי להריץ בקונסולה את הפקודה הבאה, שתיצור את דוח השינויים הראשון, מאוחר יותר על פי דוח זה יעודכן המסד:
Add-Migration TEST
נוצר לנו קובץ 201703281238372_TEST.cs, המספרים מייצגים תאריך ואצלכם זה יהיה שונה כמובן. תוכלו לראות שהשינויים המופיעים בקובץ למעשה כבר קיימים במסד, אלא כיון שזה הדוח הראשון הוא כולל את כל מה שמופיע במסד, לכן אנחנו פשוט נמחק את כל שורות הקוד שבשיגרות Up Down, ונריץ את הפקודה Update-Database כדי לעדכן את המסד. לא יקרו שום שינויים במסד, רק ירשם שהמסד מעודכן נכון לדוח זה. -
כעת אפשר ליצור את השינויים האמיתיים הראשונים למשל נוסיף מחלקה חדשה, ומאפיין מקביל ל MyDbContext כך:
public class Product
{
public int Id { get; set; }
public int Name { get; set; }
}public class MyDbContext : DbContext {
...
public DbSet<Person> People { get; set; } public DbSet<Product> Products { get; set; } }
-
נריץ פקודה ליצירת דוח חדש: Add-Migration Product, יווצר לנו דוח עם השם Product + תאריך
-
לסיום נריץ את הפקודה של העדכון שוב: Update-Database, והנה EF הוסיף לנו לתוך המסד טבלה חדשה, בדיוק על פי הקוד שכתבנו, ממש תענוג
בהצלחה !
פורסם במקור בפורום CODE613 ב28/03/2017 16:15 (+03:00)
-