برای پروژه ای خودم با توجه به پروژه، چند sln میسازم برای یکی پروژه وب و برای Model هم یک classlibrary جدا گانه و چند class library دیگر هم معمولا با توجه به پروژه اضاف میکنم
migration را برای ایجاد بانک اطلاعات ی در پروژه Model میسازم و همانجا هم دستورآپدیت بانک اطلاعاتی
در VSCode
dotnet ef migrations add yourMigrationName
dotnet ef database update
,و در Visual Studio
add-migration MigrationName -context ContextName
update-database
در ویژال استادیو زمانی از دو پروژه استفاده میکنید که یکی برای Model و یک برای پروژه وب در نظر میگرید و دستور اضافه کردن Migration را صادر میکنید لازم است تا
در منوی بالا گه پروژه استارت را تعریف میکنیم پروژه وب را تعریف منید و در قسمت package manger console هم پروژه مودال
در غیر اینصورت با خطای design time برخورد خواهید کرد، البته راه حل دیگری هم دارد که در ادامه بعد از بررسی vscode به آن میپردازیم
در VS code شما امکان استفاده بصری منند انچه در Visual studio وجود دارد نیستید
راه حل مشترکی که در یک خط بالا تر هم به ان اشاره کردم و در سابت microsoft هم به آن اشاره شده ساخت کلاسی است که از IDesignTimeDbContextFactory ارث بری داشته باشد
public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
{
EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<EmailDBContext>();
var connectionString = configuration.GetConnectionString("connection_string");
builder.UseSqlServer(connectionString);
return new EmailDBContext(builder.Options);
}
}
اما به نظر من زمانی که میشود در ویژال استادیو یا اتخاب دو گزینه به راحتی migration رو اضافه کرد چرا باید همچین کلاسی در پروژه Model ساخت !!
راه حل ساده آن این بود که در خط فرمان این کد رو بنویسیم
dotnet ef migrations add MmigrationName --context MyProjectcontext -s ../myProject.Web
که در آن نام پروژه و نام Context و نام پرژه ایکه پروژه وب شماست به اختیار شما تغییر خواهد داشت
یعنی دستور آپدیت هم به این صورت خواهد بود
dotnet ef database update --context myprojectcontext -s ../myproject.web