من به دلایل مختلف از مهاجرتها (مایگریشنهای) انتیتیفریمورک استفاده نمیکنم. دلایلش زیادن، مهمترینش اینه که کار نمیکنه و هزار تا باگ داره! بهرحال وقتی از مهاجرتها استفاده نمیکنم اگر ستون یا جدولی در کد اضافه کرده باشم که در پایگاهداده و دیتابیس نباشه، در زمان اجرا به مشکل میخورم.
هر وقت که به مشکل میخورم اون ستون یا جدول رو اضافه میکنم. ولی چند روز پیش به این نتیجه رسیدم باید ابزاری باشه که همهی این مشکلات رو زودتر از برنامهنویسای روساخت و فرانتاند تشخیص بدم و در زمان توسعه تیم روساخت صرفهجویی کنم.
اینطوری شد که یک اسکریپت برای اینکار نوشتم. روش کار این اسکریپت خیلی ساده است. به ازای هر DbSet در کانتکست، اولین رکورد از اون جدول رو بارگذاری میکنه. در این مرحله اگر جدول مورد نظر وجود نداشته باشه یا هر کدوم از ستونهای مورد نظر وجود نداشته باشند، تابع خطا صادر میکنه و فرآیند متوقف میشه.
اینجا من وارد عمل میشم، خطا رو میخونم و برطرف میکنم. دوباره تابع رو از اول اجرا میکنم و اگر باز هم خطایی باشه، این فرآیند تکرار میشه. آنقدر تکرار میشه تا اینکه در نهایت هیچ خطایی نداشته باشم (که معمولا دو سه بار کافیه)
این کد به صورت زیره:
متاسفانه من بلد نیستم در ویرگول کد بنویسم. در نتیجه عکسش رو گذاشتم. برای کپی کردن کد به نسخهی مدیوم این مقاله (که در انتهای صفحه لینک شده) مراجعه کنید
من معمولا یک پروژهی اجرایی جانبی کنار پروژهی اصلیم ایجاد میکنم که کارش نوسازی پایگاهداده و کمک به اجرای آزمونها و تستهاست. این پروژهی جانبی هیچوقت قرار نیست منتشر بشه. بنابراین من یک تابع به یکی از کنترلرهای این پروژه اضافه میکنم و با سواگر (Swagger) این تابع رو فراخوانی میکنم!
شما هم بهتره این کد رو در محصول نهایی قرار ندید چون هیچ استفادهای نداره و کد رو حتی به مقدار کمی، سنگینتر میکنه.