tgoop.com/fullStackDevs/479
Last Update:
#Keyless_Entity
🔴این پست شامل دو پیام میباشد
✳️Keyless Entity Types
🔸این ویژگی از EF Core 2.1 با نام query type به Ef Core اضافه شد که در Ef Core 3.0 به keyless entity type تغییر نام پیدا کرد است.
از این رو EF Core علاوه بر Entity های معمولی، Model میتواند شامل Entity هایی باشد که کلید اصلی
ندارند.
▪️یک keyless Entity میتواند قالب یا مدل خروجی یک کوئری،procedure که از نتیجه Join چند Table در دیتابیس به وجود می اید باشد.
علاوه بر این یک Keyless Entity اکثر ویژگی های یک Entity که شامل inheritance mapping و navigation property و ... است، پشتیبانی میکند.
همچنین میتواند یک Keyless Entity Type را به یک آبجکت نظیر Table یا View در دیتابیس Map کرد.این کار را با کمک fluent API یا data annotations میتوانید انجام دهید.
🔸با همه این ویژگی های مشترک اما یک Keyless Entity تفاوتهایی نسبت به یک Entity دارد که میتوان به موارد ذیل اشاره کرد :
▫️نمیواند کلید اصلی داشته باشند
▫️تغییرات آنها اصلا توسط Change Tracker ردیابی نمیشود پس درنتیجه هرگز امکان درج و حذف و آبدیت انها در DbContext را ندارید.
▫️برای آنها قرار دادی (Convention) وجود ندارد یعنی کلیه Convention هایی که به صورت پیشفرض برای Entity ها در Ef Core وجود دارد برای یک keyless Entity وجود ندارد.
▫️تنها از زیر مجموعه ای از navigation mapping پشتیبانی میکند که به طور خاص دارای شرایط زیر باشد :
🔹خروجی یک navigation mapping در انتهای رابطه به مانند یک principal Entity نباشد..
🔹اگر یکی از پراپرتی ها یک keyless Entity یک Complex type باشد، باید به ازای تک تک پراپرتی های آن Cpmplex type خروجی همنام متناظر داشته باشید.
🔹در هنگام navigation mapping یک keyless Entity فقط میتواند شامل reference navigation property باشد.
🔹انیتی ها نمیتوانند یک keyless Entity را به عنوان navigation property در برداشته باشند.
▫️در هنگام Configuration باید به صورت .HasNoKey() تنظیم شوند.
▫️همچنین ممکن است به یک defining query مپ شود.
🔻یک defining query کوئری است که درون Model تعریف شده و به عنوان Data Source برای keyless Entity عمل میکند.
✳️ موارد استفاده از یک keyless Entity
▪️به عنوان یک نوع بازگشتی برای raw SQL query بکار برده شود.
▪️به یک View در دیتابیس Map شود که هیچ کلید اصلی نیز ندارد.
▪️به یک جدول در دیتابیس Map شود که هیچ کلید اصلی ندارد.
▪️به کوئری های تعریف شده در مدل (defining query) مپ شود.
✳️ نحوه مپ کردن یک Keyless Entity به آبجکنی در دیتابیس
🔸با استفاده از متد های ToTable و ToView در fluent API میتوانید اینکار را انجام دهید.
▪️از دیدگاه Ef Core دیتابیس Object مشخص شده در متد ToView یک view در دیتابیس است و به یک view نمیتوان چیزی را ADD ، DELETE،UPDATE کرد. البته این به این معنی نیست که لزوما آبجکت سمت دیتابیس باید یک View باشد . میتوانید از یک Table استفاده کنید اما این Table به صورت ReadOnly رفتار میکند.
🔻نکته : زمانی که از متد ToView استفاده میکنید ویو مشخص شده باید در دیتابیس وجود داشته باشد و همچنین به صورت خودکار در هنگام مایگریشن و update Database ساخته نخواهد شد.
@FullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/479