View Full Version : سوال: DbContext در هنگام استفاده از Identity
Maryam_1368
جمعه 05 شهریور 1395, 20:44 عصر
سلام.
من می خوام از EF Codefirst توی پروژه استفاده کنم..حالا یه سوال برام پیش اومده
خود identity به صورت پیش فرض یه DbCOntext داره که برای ساختن دیتابیس استفاده میشه..
حالا منم باید یه Context جدا بسازم یا اینکه از همون استفاده کنم؟
دوستانی که تجربه دارن بهترین روش چجوریه؟
پیشاپیش ممنون:لبخندساده:
Moien Tajik
شنبه 06 شهریور 1395, 01:49 صبح
فرقی نداره . ApplicationDbContext پیشفرض که خوده Identity میسازه Table های AspNetUsers و AspNetRoles و ... توش قرار میگیره . اگر یه Context بجز اون بسازید ، برای فعال کردن Migration باید هر Context رو جدا براشون Migrations رو فعال کنید . هرزمان هم خواستید میتونید 2 تا Context رو یکی کنید ، اما بهتر هستش که کلا از یک Context استفاده کنید .
http://stackoverflow.com/a/19904081
r4hgozar
یک شنبه 07 شهریور 1395, 10:33 صبح
سلام.
کاری که من دارم تو پروژه هام انجام میدم اینه که با dbcontext که در identity هست کاری ندارم.
فقط میرم و در IdentityModels و اسم دیتابیس و اسم دلخواه خودتون میکنین.
public ApplicationDbContext()
: base("databasename", throwIfV1Schema: false)
{
}
بعد هم یه dbcontext برا خودتون می سازین، اگه خواستین می تونین میگریشن رو هم براش فعال کنید اما اسم این رو هم مشابه همون قرار میدید
public class DatabaseContext : DbContext
{
public DatabaseContext()
: base("databasename
{
}
اخر هم در وب کانفیگ یه کانکشن استرینک می سازین با همین نام دیتابیس و کار تمومه.
این کاریه که من تو چند تا پروژه انجام دادم.
موفق باشید
Maryam_1368
جمعه 19 شهریور 1395, 11:52 صبح
سلام.
کاری که من دارم تو پروژه هام انجام میدم اینه که با dbcontext که در identity هست کاری ندارم.
فقط میرم و در IdentityModels و اسم دیتابیس و اسم دلخواه خودتون میکنین.
public ApplicationDbContext()
: base("databasename", throwIfV1Schema: false)
{
}
بعد هم یه dbcontext برا خودتون می سازین، اگه خواستین می تونین میگریشن رو هم براش فعال کنید اما اسم این رو هم مشابه همون قرار میدید
public class DatabaseContext : DbContext
{
public DatabaseContext()
: base("databasename
{
}
اخر هم در وب کانفیگ یه کانکشن استرینک می سازین با همین نام دیتابیس و کار تمومه.
این کاریه که من تو چند تا پروژه انجام دادم.
موفق باشید
خوب الان اینجوری مشکل پیش نمیاد؟ یعنی دوتا dbcontext داشته باشیم ؟
بهتر نیست دیتاکانتکس Identity رو هم بیاریم روی اون یکی؟
hakim22
شنبه 20 شهریور 1395, 11:35 صبح
به طور کلی DbContext ها خاصیت اجتماع پذیری دارند. یعنی چند DbContext میتواند همزمان در یک پروژه وجود داشته باشد و EntityFramework در نهایت با اجتماع گیری(خواص مجموعه ها) از آنها دیتابیس را باز سازی یا فراخوانی می کند. یعنی یک DbSet می تواند در دو یا چند DbContext وجود داشته باشد.
جدا کردن DbContext های مربوط به جداول مختلف کمک می کند مدیریت بهتری روی دیتابیس داشته باشید. وقتی یکی از جداول DbContext تغییر میکند EntityFramework با اعلام اینکه بین کدهای موجود و دیتابیس متناظر آن تناقض وجود دارد خطا میدهد و پروژه بالا نمی آید. چاره ای ندارید جز اینکه دیتابیس پروژه را آپدیت کنید.
اما اگر از چند DbContext استفاده کنید EF فقط DbContext که به آن وصل شده است را با دیتابیس مطابقت میدهد و اگر درست بود کار میکند.
حالا اگر شما یک DbContext برای وبلاگ ، یک DbContext برای فروشگاه و یک DbContext برای Identity داشته باشید می توانید مطمئن باشید که با تغییر در جداول مربوط به وبلاگ قسمت فروشگاه سایت دست نخورده باقی می ماند و دچار مشکل نخواهد شد. با این روش شما می توانید قسمتهای مختلف یک پروژه را بدون درگیر شدن با هم آپدیت کنید.
این روش البته در پروژه هایی که از چند دیتابیس استفاده می کنند بسیار مفید است. و به این تکنیک Bounded Context گفته میشود.
خوب است همیشه حداقل از دو DbContext استفاده کنید. یکی برای Identity و یکی برای بقیه ی جداول پروژه. در غیر این صورت باید همه ی جداول پروژه را در DbContext مربوط به Identity قرار دهید.
Maryam_1368
یک شنبه 21 شهریور 1395, 21:25 عصر
خوب است همیشه حداقل از دو DbContext استفاده کنید. یکی برای Identity و یکی برای بقیه ی جداول پروژه. در غیر این صورت باید همه ی جداول پروژه را در DbContext مربوط به Identity قرار دهید.
بسیار تشکر بابت پاسخ کاملتون
...یه سوال برام پیش اومده
dbContext که واسه Identity هست از کلاس IdentityDbContext مشتق شده
در صورتی که باید از خود DbContext مشتق بشه؟
من هرچی Go to Definition هم زدم خبری از کلاس Dbcontext نبود
میشه اینم توضیح بدین که چرا از کلاسی به اسم DbContext مشتق نشده؟
از همین کلاس با نوع جنریک مشتق شده
IdentityDbContext<ApplicationUser>
hakim22
دوشنبه 22 شهریور 1395, 20:38 عصر
اتفاقا کلاس IdentityDbContext از کلاس DbContext ارث بری کرده و می توانید این رو با جستجو در Peek Definition مشاهده کنید.
ضمن اینکه در نسخه ی 3 مربوط به Identity که سورس باز هست این موضوع کاملا مشهود است. و به گفته ی تیم ASP نسخه ی سوم Identity کم و بیش شبیه نسخه ی دوم هست یعنی فرق اساسی و ساختاری نداره. سوس Identity را می توانید از Github مربوطه دانلود کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.