چگونه در روش کدفرست دیتابیس پروژه را آپدیت کنم ؟ در آپدیت دیتابیس به روش 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 هم به پایان رسید ، شما اگر مشکلی در بروزرسانی دیتابیس به روش کدفرست دارید و یا داشتید خوش حال میشم تجربیات خودتون و یا سوالات خودتون را در قسمت نظرات مطرح کنید حتما پاسخگوی شما دوستان خواهم بود.
23 پاسخ
با سلام من با migration میخوام بانک اطلاعاتی در sql server بسازم همه مراحل بخوبی انجام میشه ولی در sql server بانکم ساخته نمیشه مشکل از کجاست لطفا راهنمایی کنید
سلام
من دانشجو هستم و خیلی وارد نیستم به asp هرچی هم سرچ میزنم جوابم نیست.
من یک مدل دیتابیس ساختمو الان یدونه جدول دارم الان برای صفحه ی جدیدم یک جدول دیگه هم باید اضافه کنم خب من جدولو توی SQL ساختم حالا چجوری این رو هم اضافه کنم به پروژه؟
سلام وقتتون بخیر
در روش code first شما می تونید کلاس جدیدتون که بعدا به یک جدول تبدیل میشه رو اضافه کنید و بعد دستور add-migration و update-database تا جدول جدید برای شما ساخته شود.
سلام
ممنون از مطالب مفیدتون 🙂
میخواستم بدونم چرا دستور .OnDelete(DeleteBehavior.Restrict) برای دستورات من که کد فرست هست اجرا نمیشه و با وجودیکه من یک مقدار از جدول parent در جدولم ذخیره کردم ، اجازه حذف parent داده میشه و با این دستور جلوش گرفته نمیشه؟
سلام وقتتون بخیر
باید با این دستور جلوی آن گرفته شود … لطفا رابطه بین جداول به درستی برقرار نشده است دوباره روابط رو چک کنید و migration جدید اضافه و دیتابیس رو آپدیت کنید.
سلام من در پروژه 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)
ممنون میشم راهنماییم کنید
درضمن من خیلی خوشحالم از اینکه تو سایت شما هستم 🙂 ?
ممنونم دوست عزیز … ما هم خوش حالیم که سایت میزفا رو انتخاب کردید
مشکل از سمت sql server شماست … چک کنید که ایا sql به درستی نصب شده است یا خیر … شاید هم MSSQL شما STOP شده برای Run کردن آن مسیر زیر را طی کنید
ComputerManagement -> Services And Applications -> Sql Server Configuration Manager -> Sql Server Services -> Sql Server (MSSQL SERVER)
سلام
من تازه ویندوز رو عوض کردم و برنامه ها رو دوباره نصب کردم و وقتی خواستم دستور 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
مواجه شدم
هر چی گشتم جواب درستی پیدا نکردم
سلام وقتتون بخیر
این خطا مربوط به اتصال به دیتابیس هست که موفقیت آمیز نیست … ابتدا مطمئن بشید که sql server به درستی و به صورت کامل نصب شده هست.
بعدش اگههمچی اوکی بود روی This Pc کلیک کرده و سپس روی Manage کلیک کنید و از طریق مسیر زیر MSSQL Server رو Run کنید.
ServicesAndApplications -> Sql Server Configuration Manage -> Sql Server Services
سلام خانم ابراهیمی،
ممنون از مطالب مفیدو خوبتون، آیا راهی هست که بدون مایگریشن و آپدیت در PM، بطور خودکار در برنامه همین دستورات رو اعمال کرد؟ یعنی با آپدیت مدل و اجرای سایت ، جدول دیتابیس آپدیت بشه.
AutomaticMigrationsEnabled و MigrateDatabaseToLatestVersion رو برای چه منظوری میشه استفاده کرد؟
ممنون
سلام وقتتون بخیر … خواهش میکنم
خیر بدون ماگریشن نمیشه دیتابیس رو آپدیت کرد و لازمه شما حتما ماگریشن رو به پروژتون اضافه کنید.
با قعال کردن AutomaticMigrationsEnabled فقط ماگریشن به صورت اتوماتیک به پروژتون اضافه میشه.
سلام با تشکر از سایت خوبتون ببخشید من میخوام یکی از اتریبیوت هایی که به یکی از فیلدهام دادم رو در مدل حذف کنم بعد چطور باید migration را آپدیت کنم تا تغییرات ایجاد شه برای حذف اون صفت
سلام وقتتون بخیر
شما اتربیوت رو حذف کنید سپس یک Migration جدید ایجاد کنید و بعدش دیتابیس رو آپدیت کنید.
خیلی ممنونم مشکلمو حل کردین
سلام.مرسی از آموزش جامعتون.
من یه ستون میخوام تعریف کنم واسه تایم
[DataType[(DataType.DateTime)
{ public DateTime dtime { get; set
ولی وقتی کاربر زمان رو وارد میکنه در دیتابیس همه بصورت “0001-01-01 00:00:00.0000000” ذخیره میشه به جای تایم مورد نظر کاربر!
چی کار کنم؟وقتی از نوع string تعریف میکنم به جای DateTime درست ذخیره میشه.ولی میخوام این رو با زمان حال مقایسه کنم واسه همین نمیتونه از نوع string باشه
سلام وقتتون بخیر
شما فقط کافیه نوع پراپرتی را از نوع DateTime تعریف کنید دیگه نیازی به استفاده از اتریبوت DataType نیست
تاریخ شمسی رو از کاربر بگیرید و بعد به تاریخ میلادی تبدیل کرده و در دیتابیس ذخیره کنید.
سلام من به یکی از فیلد هام maxLength نداشت و بعد متوجعه شدم نداره و گذاشتم و رفتم دیتابیس رو ابدیت کنم ولی ارور میده میشه راهنمایی کنید
خیلی ممنون
واقعا مفیدترین آموزش Code First به زبون فارسی رو دارین
خیلی استفاده کردم از مطالبتون 🙂
یه سوال داشتم : چجوری میتونم نوع یک ستون رو تغییر بدم؟ مثلا از نوع string تعریف کردم حالا میخوام به date تغییرش بدم.
نوعش رو تو مدلم درست کردم ولی وقتی مایگریشن رو اضافه میکنم خطای build failed میده
سلام خواهش میکنم خوش حالم براتون مفید بوده است.
وقتی build failed رخ میده یعنی پروژتون خطا داره ابتدا پروژتون رو build کنید تا خطاها نمایش داده شوند و سپس خطاها رو رفع کنید و بعد migration را اضافه کنید.
سلام
خسته نباید خانوم مهندس …
من با روش Data First تو اتصال به پایگاه دادم به مشکل خوردم.
اونم اینه که وقتی یه جدول جدید میسازم بعد از این که مدل داده ای رو تو ویژوال آپدیت میکنم جدول به دیاگرام مدل داده ای اضافه میشه اما کلاس های اون ساخته نمیشه
اما وقتی همون جدول رو یه فیلد جدید اضافه کینم بعد از ریفرش کردن مشکلی نداره اون پروپرتی به کلاس جدول اضافه میشه (همین مشکل برای ویو ها هم هست)
و مشکل دگ این که وقتی یه پروسیجر هم درست میکنم همین مشکل رو دارم کلاسش ساخته نمیشه. (ممنون میشم کمکم کنید.)
داشتم تو گوگل دنبال راه حلش میگشتم اولین سایتی که اورد سایت شما بود.
سلام وقتتون بخیر
توی روش Code First چنین مشکلی رو دارید؟ یعنی جدول شما به دیتابیس اضافه نمیشود؟ یا به database diagram ؟
Operand type clash: int is incompatible with datetime2
وقتی میخوام آپدیت کنم این خطا رو میده
سلام وقتتون بخیر
داره به نوع تاریخ DateTime2 گیر میده.
نوع همه پراپرتی های از نوع تاریخ را DateTime قرار دهید.