تغییر در پایگاه داده در کمترین زمان ممکن

در شماره‌های پیش در مورد EF Code First مطالبی را گفتیم و بررسی کردیم که شما می‌توانید از روی پایگاه داده خود و روابط بین موجودیت‌های پایگاه داده خود، یکسری مدل طراحی کنید و از طریق مدل‌ها به داده‌های موجود در پایگاه داده خود دسترسی یابید. برای این کار ما EF را معرفی کردیم؛ اما یک سری چارچوب کاری دیگر برای این کار طراحی شده‌است که اصطلاحا به آنها ORM (Object Relational Modeling) گفته می‌شود و EF یکی از آنهاست.
کد خبر: ۴۳۲۷۰۴

در بقیه ORM‌ها یک زمانی شما پایگاه داده خود را تغییر می‌دهید که نیاز به تغییر کلاس‌های مدل شده از روی شمای بانک اطلاعاتی خود دارید. این کار زمانبر نیست. این که یک ORM چگونه این کار را برای شما انجام می‌دهد، بستگی به طراحی آن دارد. به طور مثال در LINQ 2 SQL شما با صفات سر و کار دارید و در صورت داشتن یک صفت، یک ویژگی از یک کلاس مدل با یک فیلد از یک جدول در پایگاه داده نگاشت می‌شود. در EF 4 نیز به همین منوال بوده‌است.

اما در نسخه EF 4.1 یا همان Code First‌ از آنجا که شما در این نسخه اول مدل‌های خود را طراحی سپس از طریق مد‌ل‌ها پایگاه داده خود را طراحی می‌کنید اگر یک زمانی منطق شما عوض شود، شما می‌توانید مثل حالت قبل کد‌ کلاس‌های مدل خود را تغییر دهید، اما تیم طراحی EF برای حل این مشکل یک راه‌حل ارائه کرده‌است تا به وسیله آن شما با تغییر کد کلاس‌های مدل خود براحتی می‌توانید پایگاه داده خود را نیز تغییر دهید.

این راه‌حل استفاده از یک کتابخانه به نام Code First Migration است، برای این کار شما نیاز دارید آخرین نسخه EF Code First را دانلود و به پروژه خود اضافه کنید. باید به یک نکته توجه داشته باشید، اگر شما نسخه Standalone چارچوب کاری EF را نصب یا آن را حذف کرده‌اید یا آن را به‌روزرسانی کنید. به خاطر این که وقتی شما نسخه Standalone‌ را نصب می‌کنید، کتابخانه آن به Cache Global Assembly) GAC) اضافه می‌شود و شما برای استفاده از نسخه به‌روزرسانی شده EF Code First با مشکل مواجه می‌شوید.

برای نصب آخرین نسخه می‌توانید از NuGet Package Manager استفاده کنید.

برای این کار از منوی view در ویژوال استودیو روی Other Windows کلیک کرده سپس

Package Mangaer Console را انتخاب و در پنجره باز شده عبارت Install-Package EntityFramework را تایپ کنید و سرانجام Enter را بزنید.

بعد از نصب نسخه EF 4.1 Update1 شما می‌توانید همان مراحل قبلی را که در شماره‌های پیش توضیح داده شد انجام ‌دهید. بعد نوبت به تغییر کلاس مدل می‌رسد؛ فرض کنید یک کلاس مدل به صورت زیر تعریف شده‌است:

public class Person

{

public int PersonId { get; set; }

public string Name { get; set; }

}

حال آن را به صورت زیر بازنویسی می‌کنیم:

public class Person

{

public int PersonId { get; set; }

public string Name { get; set; }

public string Email { get; set; }

}

ســـپس کــــــافـــی است نسخــــه EntityFramework.SqlMigrations را نصب کنید. برای این کار نیز می‌توانید
مانند نصب Entity Framework‌ از NuGet‌ استفـــــاده کنید و عبــــارت Install-Package EntityFramework.SqlMigrations را وارد کنید.

بعد از نصب SqlMigration شما می‌توانید دیتابیس خود را از طریق مدل‌های خود به‌روزرسانی کنید، اما چگونه؟

کافی است در پنجره Package Manager Console‌عبارت Update-Database را وارد کنید.

بعد از این کار پایگاه داده شما بر اساس تغییر مدل‌ها خود را به روزرسانی می‌کند، اما حالا می‌خواهیم نام یک فیلد را عوض کنیم؛ مثلا کلاس بالا را به صورت زیر بازنویسی می‌کنیم:

public class Person

{

public int PersonId { get; set; }

public string Name { get; set; }

public string EmailAddress { get; set; }

}

باز عبارت Update-Database را می‌زنیم، اما این بار با این هشدار مواجه می‌شویم:

”Update-Database : -.Net SqlClient Data Provider: ……. Rows were detected. The schema update is terminating because data loss might occur.”

این هشدار به ما می‌گوید ممکن است بعد از به روزرسانی، داده‌های شما با مشکل مواجه می‌شود.

برای این که ببینید دقیقا چه اتفاقی می‌افتد، دستور زیر را وارد کنید: Update-Database –Script

همان طور که مشاهده می‌کنید یک خط از آن به صورت زیر است :

ALTER TABLE [dbo].[People] DROP COLUMN [Email] ;

یعنی می‌خواهد ستون Email را Drop کند، در واقع این ستون را حذف می‌کند.

اما راه حل چیست؟ برای رفع این مشکل شما می‌توانید دستور زیر را وارد کنید :

Update-Database -Renames:"Person.Email=»Person.EmailAddress"

این کار باعث می‌شود فقط نام ستون تغییر کند و هیچ تغییر در ساختار پایگاه داده در طول انجام این عمل صورت نگیرد و دیگر ستونی حذف نشود و دوباره با یک نام دیگر اضافه شود.

منبع:

http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-walkthrough-of-august-2011-ctp.aspx

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها