آپدیت دیتابیس در روش Code First

Update دیتابیس در روش کدفرست
update database in entity framework core

چگونه در روش کدفرست دیتابیس پروژه را آپدیت کنم ؟ در آپدیت دیتابیس به روش CodeFirst مشکل دارم چطوری میتونم مشکل خودم را حل کنم؟

سلام ، آرزو ابراهیمی هستم برنامه نویس .net ، با یک مقاله آموزشی دیگر از سری مقالات آموزش mvc core سایت میزفا در خدمت شما دوستان هستم مطالعه این مقاله آموزشی از نون شب هم واجب تره پس آب دستتون هست بزارید زمین و با این مقاله آموزشی همراه باشید.

آموزش بروزرسانی Database در روش کدفرست در EF Core

فرض کنید که دیتابیس خودتان را به روش CodeFirst ساختید و حالا قصد دارید که یکی از جداول این دیتابیس را آپدیت کنید به عنوان مثال من می‌خواهم به جدول Students که در جلسه‌ی  آموزش ساخت دیتابیس به روش کدفرست با هم ساختیم یک ستون دیگر به نام کدملی اضافه کنم خب چطوری می توانم اینکار را انجام دهم ؟ خیلی ساده است فقط کافیه که یک migration جدید اضافه کنید و بعد با دستور update-database دیتابیس خودتان را آپدیت کنید.

پس Domain Class مربوط به موجودیت دانشجو را به صورت زیر تغییر می‌دهیم (برای اضافه شدن ستون کدملی یک پراپرتی جدید به نام NationalCode به این کلاس اضافه کردم.)

 public class Student
    {
        public string StudentId { get; set; }
        public string NationalCode { get; set; }
        public string Name { get; set; }
        public string Family { get; set; }
        public DateTime BirthDate { get; set; }
    }

خب حالا باید یک migration جدید اضافه کنیم برای این منظور دستور add-migration را در پنجره Package Manager Console وارد نموده سپس یک نام برای ماگریشن قرار دهید من نام این ماگریشن را Update_StudentsDB_AddColumn_NationalCode قرار میدهم شما می‌توانید از نام های کوتاه تری برای نام گذاری migration استفاده کنید ولی به این نکته توجه داشته باشید که هر چه نام های پرمعناتری برای ماگریشن انتخاب کنید مدیریت آپدیت های دیتابیس در آینده برای شما راحتتر خواهد بود.

پس دستور زیر را در محیط پکیج منیجر کنسول (Package Manager Console ) وارد می‌کنم و دکمه Enter را میزنم.

add-migration Update_StudentsDB_AddColumn_NationalCode

و حالا دستور update-database را در محیط Package Manager Console وارد می‌کنم و دکمه Enter را میزنم تا دستور اجرا و دیتابیس آپدیت شود.

update-database

تبریک میگم شما موفق شدید با یک تغییر در کلاس domain و وارد نمودن دوتا دستور ساده دیتابیس خودتان را آپدیت کنید . آپدیت دیتابیس گاهی وقتا برای ما دردسر های ایجاد خواهد کرد و اونقدری که فکر می‌کنیم راحت نیست در این حالت باید حتما کلاس های domain و روابط بین اونها را بررسی کنیم تا مشکل حل شود.

بسیار خب این مقاله آموزشی از سری مقالات  آموزش Entity Framework Core هم به پایان رسید ، شما اگر مشکلی در بروزرسانی دیتابیس به روش کدفرست دارید و یا داشتید خوش حال میشم تجربیات خودتون و یا سوالات خودتون را در قسمت نظرات مطرح کنید حتما پاسخگوی شما دوستان خواهم بود.

فیلم آموزشی asp.net core 2

آرزو ابراهیمی
بیش از 6 سال است که زمینه طراحی و توسعه سایت فعالیت می‌کنم، طراح و برنامه نویس انواع سامانه‌های تخصصی پزشکی، مناقصات، فروشگاهی و … بودم و هستم و هدفم در سایت میزفا ارائه اطلاعات بروز و ناب در زمینه طراحی سایت است. تا از این طریق بتونم تجربیات و دانسته های خودم را با تمامی علاقمندان به مباحث طراحی سایت به اشتراک بزارم .

فیلم آموزشی asp.net core 2

23 نظر

23 پاسخ

  1. با سلام من با migration میخوام بانک اطلاعاتی در sql server بسازم همه مراحل بخوبی انجام میشه ولی در sql server بانکم ساخته نمیشه مشکل از کجاست لطفا راهنمایی کنید

  2. سلام
    من دانشجو هستم و خیلی وارد نیستم به asp هرچی هم سرچ میزنم جوابم نیست.
    من یک مدل دیتابیس ساختمو الان یدونه جدول دارم الان برای صفحه ی جدیدم یک جدول دیگه هم باید اضافه کنم خب من جدولو توی SQL ساختم حالا چجوری این رو هم اضافه کنم به پروژه؟

    1. سلام وقتتون بخیر
      در روش code first شما می تونید کلاس جدیدتون که بعدا به یک جدول تبدیل میشه رو اضافه کنید و بعد دستور add-migration و update-database تا جدول جدید برای شما ساخته شود.

  3. سلام
    ممنون از مطالب مفیدتون 🙂
    میخواستم بدونم چرا دستور .OnDelete(DeleteBehavior.Restrict) برای دستورات من که کد فرست هست اجرا نمیشه و با وجودیکه من یک مقدار از جدول parent در جدولم ذخیره کردم ، اجازه حذف parent داده میشه و با این دستور جلوش گرفته نمیشه؟

    1. سلام وقتتون بخیر
      باید با این دستور جلوی آن گرفته شود … لطفا رابطه بین جداول به درستی برقرار نشده است دوباره روابط رو چک کنید و migration جدید اضافه و دیتابیس رو آپدیت کنید.

  4. سلام من در پروژه xamarin کراس پلتفرم یک api از نوع asp.net core اضاف کردم مایگریشنو ساختم ولی موقع اپدیت این ارورو نشون میده
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_1.b__0()
    at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
    ClientConnectionId:00000000-0000-0000-0000-000000000000
    Error Number:-1,State:0,Class:20
    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)
    ممنون میشم راهنماییم کنید
    درضمن من خیلی خوشحالم از اینکه تو سایت شما هستم 🙂 ?

    1. ممنونم دوست عزیز … ما هم خوش حالیم که سایت میزفا رو انتخاب کردید
      مشکل از سمت sql server شماست … چک کنید که ایا sql به درستی نصب شده است یا خیر … شاید هم MSSQL شما STOP شده برای Run کردن آن مسیر زیر را طی کنید
      ComputerManagement -> Services And Applications -> Sql Server Configuration Manager -> Sql Server Services -> Sql Server (MSSQL SERVER)

  5. سلام
    من تازه ویندوز رو عوض کردم و برنامه ها رو دوباره نصب کردم و وقتی خواستم دستور update-database رو اجرا کنم با این ارور
    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server
    مواجه شدم

    هر چی گشتم جواب درستی پیدا نکردم

    1. سلام وقتتون بخیر
      این خطا مربوط به اتصال به دیتابیس هست که موفقیت آمیز نیست … ابتدا مطمئن بشید که sql server به درستی و به صورت کامل نصب شده هست.
      بعدش اگههمچی اوکی بود روی This Pc کلیک کرده و سپس روی Manage کلیک کنید و از طریق مسیر زیر MSSQL Server رو Run کنید.
      ServicesAndApplications -> Sql Server Configuration Manage -> Sql Server Services

  6. سلام خانم ابراهیمی،
    ممنون از مطالب مفیدو خوبتون، آیا راهی هست که بدون مایگریشن و آپدیت در PM، بطور خودکار در برنامه همین دستورات رو اعمال کرد؟ یعنی با آپدیت مدل و اجرای سایت ، جدول دیتابیس آپدیت بشه.
    AutomaticMigrationsEnabled و MigrateDatabaseToLatestVersion رو برای چه منظوری میشه استفاده کرد؟
    ممنون

    1. سلام وقتتون بخیر … خواهش میکنم
      خیر بدون ماگریشن نمیشه دیتابیس رو آپدیت کرد و لازمه شما حتما ماگریشن رو به پروژتون اضافه کنید.
      با قعال کردن AutomaticMigrationsEnabled فقط ماگریشن به صورت اتوماتیک به پروژتون اضافه میشه.

  7. سلام با تشکر از سایت خوبتون ببخشید من میخوام یکی از اتریبیوت هایی که به یکی از فیلدهام دادم رو در مدل حذف کنم بعد چطور باید migration را آپدیت کنم تا تغییرات ایجاد شه برای حذف اون صفت

    1. سلام وقتتون بخیر
      شما اتربیوت رو حذف کنید سپس یک Migration جدید ایجاد کنید و بعدش دیتابیس رو آپدیت کنید.

  8. سلام.مرسی از آموزش جامعتون.
    من یه ستون میخوام تعریف کنم واسه تایم

    [DataType[(DataType.DateTime)
    { public DateTime dtime { get; set
    ولی وقتی کاربر زمان رو وارد میکنه در دیتابیس همه بصورت “0001-01-01 00:00:00.0000000” ذخیره میشه به جای تایم مورد نظر کاربر!
    چی کار کنم؟وقتی از نوع string تعریف میکنم به جای DateTime درست ذخیره میشه.ولی میخوام این رو با زمان حال مقایسه کنم واسه همین نمیتونه از نوع string باشه

    1. سلام وقتتون بخیر
      شما فقط کافیه نوع پراپرتی را از نوع DateTime تعریف کنید دیگه نیازی به استفاده از اتریبوت DataType نیست
      تاریخ شمسی رو از کاربر بگیرید و بعد به تاریخ میلادی تبدیل کرده و در دیتابیس ذخیره کنید.

    2. سلام من به یکی از فیلد هام maxLength نداشت و بعد متوجعه شدم نداره و گذاشتم و رفتم دیتابیس رو ابدیت کنم ولی ارور میده میشه راهنمایی کنید

  9. خیلی ممنون
    واقعا مفیدترین آموزش Code First به زبون فارسی رو دارین
    خیلی استفاده کردم از مطالبتون 🙂
    یه سوال داشتم : چجوری میتونم نوع یک ستون رو تغییر بدم؟ مثلا از نوع string تعریف کردم حالا میخوام به date تغییرش بدم.
    نوعش رو تو مدلم درست کردم ولی وقتی مایگریشن رو اضافه میکنم خطای build failed میده

    1. سلام خواهش میکنم خوش حالم براتون مفید بوده است.
      وقتی build failed رخ میده یعنی پروژتون خطا داره ابتدا پروژتون رو build کنید تا خطاها نمایش داده شوند و سپس خطاها رو رفع کنید و بعد migration را اضافه کنید.

  10. سلام
    خسته نباید خانوم مهندس …
    من با روش Data First تو اتصال به پایگاه دادم به مشکل خوردم.
    اونم اینه که وقتی یه جدول جدید میسازم بعد از این که مدل داده ای رو تو ویژوال آپدیت میکنم جدول به دیاگرام مدل داده ای اضافه میشه اما کلاس های اون ساخته نمیشه
    اما وقتی همون جدول رو یه فیلد جدید اضافه کینم بعد از ریفرش کردن مشکلی نداره اون پروپرتی به کلاس جدول اضافه میشه (همین مشکل برای ویو ها هم هست)
    و مشکل دگ این که وقتی یه پروسیجر هم درست میکنم همین مشکل رو دارم کلاسش ساخته نمیشه. (ممنون میشم کمکم کنید.)
    داشتم تو گوگل دنبال راه حلش میگشتم اولین سایتی که اورد سایت شما بود.

    1. سلام وقتتون بخیر
      توی روش Code First چنین مشکلی رو دارید؟ یعنی جدول شما به دیتابیس اضافه نمیشود؟ یا به database diagram ؟

  11. Operand type clash: int is incompatible with datetime2
    وقتی میخوام آپدیت کنم این خطا رو میده

    1. سلام وقتتون بخیر
      داره به نوع تاریخ DateTime2 گیر میده.
      نوع همه پراپرتی های از نوع تاریخ را DateTime قرار دهید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=