tgoop.com/fullStackDevs/562
Create:
Last Update:
Last Update:
✳️ معرفی مهمترین ویژگی های اضافه شده به Ef Core 5 Preview 7
🔹 در این پست به بررسی ویژگی های جدیدی که به این پیشنمایش افزوده شده است می پردازیم.
🔹 DbContextFactory
🔸در این پیشنمایش متد AddDbContextFactory معرفی شده که به وسیله اون میتوانید factory ای را برای ساختن اشیاء DbContext در Di Container رجیستر نمایید.
services.AddDbContextFactory<SomeDbContext>(b =>🔹همچنین به کمک متد AddPooledDbContextFactory مخزنی برای نگه داری اشیاء DbContext ای که توسط DbContextFactory ساخته شده، ایجاد میکنید.و هربار که از factory شی DbContext جدیدی درخواست میکنید با بررسی مخزن در صورتی که
b.UseSqlServer(ConnectionString));
شی DbContext ای در دسترس باشد در اختیارتان قرار میگیرد.
🔹 نکته مهم در استفاده از DbContextFactory این است که اشیاء DbContext ساخته شده توسط Service Provider مدیریت نمیشوند و Dispose کردن آنها باید توسط اپلیکیشن (ن Container) انجام شود.
🔹Reset DbContext state
اگر طی شرایطی نیاز داشته باشید تا وضعیت شی DbContext را reset کنید استفاده از ChangeTracker.Clear() بسیار بهتر ( از نظر بهبود عملکرد) از detaching کردن همه ی Entity های track شده است.
🔹 معرفی روش جدید برای ذخیره مقادیر پیشفرض برای Column ها
🔸با استفاده از این روش میتوانید برای column های خود در Ef Core مقادیر پیشفرض تعریف کنید .همچنین Column مربوطه میتواند مقدار پیشتفرض دیتابیسی داشته باشد. در اینصورت اگر در هنگام insert در دیتابیس ، اگر مقدار column مربوطه مقدار پیشفرض Clr type آن نباشد. مقدار آن در دیتابیس Insert خواهد شد. در غیر اینصورت مقدار پیشفرض دیتابیس استفاده خواهد شد.
public class Blog
{
private bool? _isValid;
public bool IsValid
{
get => _isValid ?? false;
set => _isValid = value;
}
}
🔸 در برخی موارد استفاده از مقدار پیشفرض برخی type های Clr میتواند معانیه خاصی در اپلیکیشن داشته باشد. به عنوان مثال مقدار پیشفرض تایپ boolean مقدار false هست. گاهی اوقات مقدار false برای فیلدی در دیتابیس در اپلیکیشن معنای به خصوصی دارد در چنین شرایطی درج مقدار پیشفرض Clr ای برای این type ها دقت و حساسیت اپلیکیشن را زیر سوال میبرد.
برای حل این مشکل باید یک backing field کمک بگیریم. backing field باید نال پذیر باشد و در صورت نال بودن آن مقدار پیشفرض type را برای پراپریتی set کنیم. Ef core با watch کردن این پراپرتی متوجه میشود که مقدار ان مقدار پیشفرض clr type ان است و در نتیجه اگر برای فیلد مان مقدار پیشفرض دیتابیسی تنظیم کرده باشیم. Ef core از آن برای insert در دیتابیس استفاده میکند.
🔹ایجاد نام های مفرد هنگام reverse engineering کردن دیتابیس و Scaffold کردن DbContext
🔸تا پیش از این اگر دیتابیسی را مهندسی معکوس میکردید و زمانی که Ef Core از روی دیتابیس DbContext را scaffold میکرد برای تطابق اسامی جدول ها و Entity ها اسامی Entity ها نیز به صورت جمع تولید میشدند.
یعنی اگر در دیتابیس جدولی به نام people داشتید بعد از مهندسی معکوس کلاسی معادل با نام people تولید میشد. با افزودن این ویژگی کلاس تولید شده نامی مفرد خواهد داشت و person تولید خواهد شد.
🔹Savepoints
🔸افزودن پشتیبانی از savepoint به Ef Core با استفاده از این ویژگی، هنگامی که اجرای SaveChanges با شکست مواجع شود Ef Core ترانزکشن را به اخرین save point تعیین شده roll back خواهد کرد.
بدین صورت میتوانید یک save point ایجاد کنید.
context.Database.CreateSavepoint("MySavePoint");🔸در نتیجه به جای اینکه ترانزکشن دوباره از ابتدا انجام شود. تلاش میشود که از save point تعییین شده ادامه پیدا کند. یک save point در داخل یک transaction در دیتابیس مانند یه marker عمل میکند و محلی رو تعیین میکند که اگر قستمی از transaction کنسل شده . بتوان ادامه transaction را از آنجا ادامه داد.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/562