سلام
چطور میشه از دیتابیسی که قبلا ساخته شده و حاوی رکورد و داده هست در پروژه جدید استفاده کرد به طوری که در توسعه های آینده با Migration به اون فیلد جدیدی اضافه کرد؟
یا بهتره اینجوری بپرسم که: از یک دیتابیس دارای رکورد و داده در پروژه خودم استفاده کردم و حالا به یکی از جداول فیلدی (پراپرتی) رو اضافه کردم. حالا برای بروزرسانی دیتابیس با magration زدن به من ارور میده که جداول قبلا ساخته شدند و نمی تونه کار کنه.(ارور زیر)
Error : There is already an object named 'Products' in the database
چطور میشه از بروز این error زیر در migration جلوگیری کرد؟
.
ممنون از وقت ی که میزارید
اگر دیتابیس شما از قبل آماده هست یعنی به صورت database First آماده شده و حالا می خواید این دیتابیس رو تبدیل به Code First کنید باید مراحل زیر رو به ترتیب انجام بدید
استفاده از پکیج های کار با EntityFramework Core
در ابتدا باید دقت کنید که در پروژه شما پکیج های لازم برای کار با Entity Framework core اضافه شده باشه. در صورتی که این پکیج ها اضافه نشده روی نام پروزه در Solution Explorer کلیک راست کنید و گزینه Nuget Package Manager رو بزنید.
سپس در فرم nuget و در قسمت Browse پکیج های زیر را سرچ کنید و نصب کنید
Microsoft.EntityFrameWorkCore.SqlServer
Microsoft.EntityFrameWorkCore.Tools
Microsoft.VisualStudio.Web.CodeGeneration.Design
بعد از اینکه این پکیج ها رو نصب کردید می تونید از قابلیت های انتیتی فریم ورک کور استفاده کنید.
استفاده از دیتابیس موجود
دیتابیس شما باید روی Sql Server نصب شده روی کامپیوتر شما وجود داشته باشد. همچنین می توانید فایل mdf دیتابیس رو در کنار پروژه یا در یک مسیر خاص در کامپیوتر داشته باشید. اما گزینه بهتر این است که روی Sql Server ری استور شده باشد.
تبدیل دیتابیس موجود به مدل Code First
حالا موقع اون رسیده که دیتابیس موجود رو به صورت کدفرست تبدیل کنید. برای این کار از منوی Tools مانند تصویر زیر Nuget Package Manager رو باز کنید
حالا دستور زیر را برای تبدیل دیتابیس موجود به مدل Code first بنویسید
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
توسط دستور Scaffold-DbContext میتونید دیتابیس موجود رو به کلاسهای Code First تبدیل کنید. دقت کنید که عبارت بعد از Scaffold-DbContext همان کانکشن استرینگ می باشد. همچنین در این دستور مشخص شده که کلاس ها و فایل DbContext در پوشه Model باید ایجاد شود.
بعد از اجرای این دستور کلاسهای دیتابیس که همان جداول هستند به وجود می آید.
همچنین درون هر کلاس فیلدها و روابط بین اونها مشخص شده.
دقت کنید که برای استفاده از این Model ایجاد شده باید تنظیمات Connection String رو درون فایل appsetting.json انجام بدید و همچنین در فایل startup.cs هم تنظیمات و پیکربندیهای لازم انجام شده باشه.
حالا کافیه از طریق دستور زیر دیتابیس رو مجدد به روش code First و به روش Migration ایجاد کنید (البته دقت کنید که اگر در دیتابیس شما از قبل اطلاعاتی وجود داره نباید این مرحله به بعد رو انجام بدید.)
Add-Migration mig_name
و در انتها هم
Update-Database
نکته ) اگر از قبل در دیتابیس شما اطلاعاتی وجود داشت فقط کافیه در دیتابیس یک جدول به نام __EFMigrationsHistory ایجاد کنید که شامل 2 فیلد MigrationID به عنوان کلید اصلی و ProductVersion از نوع nvarchar(32) باشه.
به این صورت دیتابیس شما به صورت Code First تبدیل میشه و می تونید از اون استفاده کنید. برای کسب اطلاعات بیشتر اینجا کلیک کنید
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
75
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
429
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4798
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
214
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
396
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
567
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2008
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
75
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
429
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4798
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1160
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
597
- پاسخ :
1
|