View Full Version : سوال: ساختن چند DbContext در CodeFirst
Maryam_1368
چهارشنبه 24 شهریور 1395, 09:11 صبح
سلام دوستان عزیز.
توی ASP.NET MVCوقتی یه پروژه ازنوع MVC تعریف میکنیم خود Identity یه دیتابیس کانتکس داره
حالا وقتی من می خوام یه دیتابیس کانتکس درست کنم که جدول های خودم رو ایجاد کنم بدون اینکه کار به Identity داشته باشم، گویا این مورد امکان پذیر نیست..
من میام توی پوشه Model یه کلاس میسازم و اون رو از از کلاس DbContext ارث بری میکنم و به عنوان مثلا
Public Dbset<News> News {get;set;}
رو هم براش مینوسیم که جدول مربوط به اخبار ایجاد بشه
اما وقتی پروژه اجرا میشه فقط جدوال مربوط به Identity ایجاد میشه و گویا اینی که من ساختم رو در نظر نمیگیره
حالا همین کد بالا رو اگه توی کانتکس Identity بذارم بدون مشکل جدولم ایجاد میشه..
مشکل چیست؟
پیشاپیش ممنون:لبخندساده:
Dream8
چهارشنبه 24 شهریور 1395, 09:34 صبح
با سلام. آیا Migration هم فعال کرده اید؟
Maryam_1368
چهارشنبه 24 شهریور 1395, 09:36 صبح
با سلام. آیا Migration هم فعال کرده اید؟
سلام....خیر
hakim22
چهارشنبه 24 شهریور 1395, 09:46 صبح
وقتی چند DbContext دارید باید از Migration برای آپدیت دیتابیس استفاده کنید. دیتابیس به طور خودکار بروز نمیشود چون EF نمی تواند تشخیص دهد باید تغییرات کدام DbContext را اعمال کند.
وقتی از Enable-Migration استفاده می کنید حتما باید مقدار ContextTypeName- را هم تنظیم کنید. مثلا باید در PM دستور زیر را وارد کنید.
Enable-Migrations -ContextTypeName MyProject.MyIdentityDb
در اینجا قسمت MyProject.MyIdentityDb آدرس کامل NameSpace و نام کلاس مربوط به IdentityDbContext است.
برای DbContext دوم هم باید همین دستور را اجرا کنید :
Enable-Migrations -ContextTypeName MyProject.MyOtherDb
در واقع در تمام دستورات باید نام DbContext ذکر شود.
Maryam_1368
پنج شنبه 25 شهریور 1395, 10:30 صبح
وقتی چند DbContext دارید باید از Migration برای آپدیت دیتابیس استفاده کنید. دیتابیس به طور خودکار بروز نمیشود چون EF نمی تواند تشخیص دهد باید تغییرات کدام DbContext را اعمال کند.
وقتی از Enable-Migration استفاده می کنید حتما باید مقدار ContextTypeName- را هم تنظیم کنید. مثلا باید در PM دستور زیر را وارد کنید.
Enable-Migrations -ContextTypeName MyProject.MyIdentityDb
در اینجا قسمت MyProject.MyIdentityDb آدرس کامل NameSpace و نام کلاس مربوط به IdentityDbContext است.
برای DbContext دوم هم باید همین دستور را اجرا کنید :
Enable-Migrations -ContextTypeName MyProject.MyOtherDb
در واقع در تمام دستورات باید نام DbContext ذکر شود.
بسیار ممنون
برای دومی که میخام فعال کنم پیغام زیر رومیده
Migrations have already been enabled in project 'MyProject'. To overwrite the existing migrations configuration, use the -Force parameter.
Maryam_1368
پنج شنبه 25 شهریور 1395, 11:02 صبح
البته مشکلش رو پیدا کردم باید توی پوشه Migration فایل config رو پاک میکردم
حالا من مایگریشن رو واسه جفتشون فعال کردم اما مثل اینکه باید با دستور
Update-Database -ConfigurationTypeName MyRenamedConfiguration
بهش بگم از dbcontext من برای تغییرات استفاده کن
اما بهم خطا میده وقتی این کار رو میکنم
The type 'MyProject.Models.myDbContext' does not inherit from 'System.Data.Entity.Migrations.DbMigrationsConfigu ration'. Migrations configuration types must extend from 'System.Data.Entity.Migrations.DbMigrationsConfigu ration'.
Moien Tajik
پنج شنبه 25 شهریور 1395, 14:32 عصر
یک روش کلی برای فعال کردن Migrations وجود داره که به این صورت هستش ;
در فایل Global.Asax در Root برنامتون در قسمت Application_Start این کد رو قرار میدید ( نام YourContext رو به نام Context خودتون تغییر بدید ) :
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourContext, MigrationConfig>());
و بعد از Application_Start یک کلاس که از DbMigrationConfiguration ارث بری میکنه رو میسازید و تنظیمات Migrations رو براش قرار میدید به این صورت :
public class MigrationConfig : DbMigrationsConfiguration<YourContext>
{
public MigrationConfig()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(YourContext context)
{
}
}
Maryam_1368
شنبه 27 شهریور 1395, 16:44 عصر
یک روش کلی برای فعال کردن Migrations وجود داره که به این صورت هستش ;
در فایل Global.Asax در Root برنامتون در قسمت Application_Start این کد رو قرار میدید ( نام YourContext رو به نام Context خودتون تغییر بدید ) :
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourContext, MigrationConfig>());
و بعد از Application_Start یک کلاس که از DbMigrationConfiguration ارث بری میکنه رو میسازید و تنظیمات Migrations رو براش قرار میدید به این صورت :
public class MigrationConfig : DbMigrationsConfiguration<YourContext>
{
public MigrationConfig()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(YourContext context)
{
}
}
ممنون
یعنی وقتی این کار رو به صورت دستی انجام بدیم حکم اینو داره که به Nuget دستور Enable-Migrations رو میزنیم؟
اونم فکر کنم دقیقا همین کار رو انجام میده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.