PDA

View Full Version : سوال: مایگریشن و AutomaticMigrationDataLossAllowed



bftarane
سه شنبه 26 دی 1396, 14:51 عصر
سلام دوستان

این طور که من متوجه شدم هنگام استفاده از مایگریشن این کد رو باید به سازنده کلاس configuration موجود در فولدر migration اضافه کنیم

AutomaticMigrationDataLossAllowed = true;
تا تغییراتی که بعدها در مدل می دیم به دیتابیس اعمال بشه

ترجمه تحت اللفظی این کد این میشه که ممکنه داده هایی از دست برن

حالا سوال من اینه فرض کنید یک وب سایت به صورت کد فرست ایجاد کردیم و یه سری داده مهم هم زده شده در دیتابیس و پس از مدتی به خواست کارفرما نیاز میشه که یه فیلد به دیتابیس اضافه بشه.

حالا سوال من اینه که آیا این ریسک نیست که به خاطر افزودن یه فیلد امکان از دست رفتن داده های مهم ما وجود داشته باشه؟


ممنون می شم در این مورد راهنمایی کنید.

ali_md110
سه شنبه 26 دی 1396, 15:56 عصر
نه خیر داده های شما از دست نخواهد رفت و فیلدهای مورد نظر به جداول شما اضافه خواهند شد
فقط نال بودن و نبودن فیلدهای جدید رو باید بررسی کنید اگر یک فیلد نال پذیر نباشد مقدار پیش فرض را هم به هنگام Migration به جداول اضافه کنید

a.golzar66
چهارشنبه 27 دی 1396, 08:04 صبح
دوستمون درست میفرمایند من بارها تو پروژهام فیلد یا جدول کم و زیاد میکنم هیچ مشکلی هم پیش نیومده

hakim22
چهارشنبه 27 دی 1396, 10:09 صبح
عبارت DataLoss به این موضوع اشاره میکنه که هرجا نیاز به حذف داده وجود داشته باشه خودکار انجام میشه .
مثلا اگر قبلا یک فیلد متنی داشتید که طولش 100 کاراکتر بود و در آپدیتهای بعدی کردید 50 کاراکتر خودش دیتابیس رو تغییر میده و رشته های اضافه رو میبره و از شما هم سوال نمیکنه.

کلا این گزینه برای پیاده سازی پروژه های واقعی مناسب نیست. اینجور ابزار برای تست و پروژه های سر سری خوبه. در واقع مایکروسافت همیشه سعی میکنه ابزار جانبی بزاره که کمک کنه پروژه بی دردسر بالا بیاد و کسی که اولین روزه داره از ASP استفاده میکنه به خاطر ارورها سرخورده نشه.

بهتره شما برای هر تغییر در DataBase یک Migration جدا ایجاد کنید .
همچنین قبل از آپدیت کردن دیتابیس با EF مخصوصا اگر اطلاعات دیتابیس برای شما اهمیت زیادی داره پشتیبان تهیه کنید.

bftarane
چهارشنبه 27 دی 1396, 11:46 صبح
بهتره شما برای هر تغییر در DataBase یک Migration جدا ایجاد کنید .

میشه این رو بیشتر توضیح بدید؟
الان برای فعال کردن مایگریشن من از کد ذیل در package manager console استفاده می کنم

enable-migrations -contexttypename applicationdbcontext -enableautomaticmigrations


اگه بخوام برای هر تغییر یک مایگریشن جداگانه ایجاد کنم چه کار باید کرد؟

ببخشید عبارت separate migration for each change رو گوگل کردم نتیجه ای نگرفتم.

hakim22
چهارشنبه 27 دی 1396, 13:52 عصر
اگر در پروژه فقط یک DbContext دارید نیاز به وارد کردن هیچ پارامتری ندارید . فقط کافیه enable-migrations رو اجرا کنید تا یک فولدر در پروژه ایجاد کنه به نام Migrations که یک فایل تنظیمات هم داره.
دقت کنید که Package Manager Console روی پروژه ی دارای DbContext ست شده باشه.

در مرحله ی بعد برای ایجاد میگرشن باید از دستور Add-migration استفاده کنید و یک نام بدید. مثلا Add-migration MyUpdateName

راهنمای کامل :
https://msdn.microsoft.com/en-us/library/jj554735(v=vs.113).aspx