پیاده سازی Soft Delete در Asp.net Core با استفاده از EF Core
سناریوهای حذف داده در پایگاه داده
در روش سنتی برای حذف اطلاعات در پایگاه داده از روش "hard delete" یا حذف فیزیکی استفاده می کنند. حذف فیزیکی یک رکورد را برای همیشه از جدول پایگاه داده پاک می کند. اگرچه این کار ساده به نظر می رسد، اما خطر قابل توجهی را به همراه دارد: زمانی که آن داده ها از بین رفت، برای همیشه از بین می روند.
به جای حذف فیزیکی یک رکورد، یک حذف نرم افزاری آن را به عنوان حذف شده علامت گذاری می کند، معمولاً با تنظیم پرچمی مانندIsDeleted روی مقدار true میتوان این موضوع را مدیریت کرد. در این روش رکورد در پایگاه داده باقی می ماند، اما عملاً از پرس و جوها پنهان است.
ما در این آموزش به جزئیات نحوه پیاده سازی Soft Delete یا حذف نرم افزاری با استفاده از EF Core خواهیم پرداخت. همچنین در مورد global query filter ها بحث خواهیم کرد، راههای کارآمد برای مدیریت دادههای پاکشده نرمافزاری را بررسی و ارزیابی خواهیم کرد. همچنین در این آموزش برای پیاده سازی Soft Delete یا حذف نرم از دات نت 8 و Interceptor ها در EF Core استفاده خواهیم کرد.
دریافت سورس پروژه در گیت هاب
حذف نرم افزاری یا Soft Delete چیست؟
حذف نرم یا Soft Deleteیک استراتژی داده است که از حذف دائمی رکوردها از پایگاه داده شما جلوگیری می کند. به جای حذف داده ها از پایگاه داده، یک پرچم روی رکورد تنظیم می شود که آن را به عنوان "حذف شده" نشان می دهد.
این رویکرد به برنامه اجازه می دهد تا این رکوردها را در طول پرس و جوهای معمولی نادیده بگیرد. با این حال، در صورت لزوم می توانید این رکوردها را بازیابی کنید. اگر میخواهید محدودیتهای کلید خارجی را حفظ کنید، حذف نرم نیز عملی است. حذف نرم افزاری بر خلاف حذف فیزیکی، یک عملیات "غیر مخرب" است که در آن داده ها به طور کامل از پایگاه داده حذف می شوند.
آیا واقعاً به حذف های نرم یا Soft Delete نیاز است؟
اگر حتی نیاز به حذف نرم رکوردها دارید، ارزش آن را دارد که به آن فکر کنید.
در سیستمهای سازمانی، معمولاً به «حذف» دادهها فکر نمیکنید. مفاهیم تجاری وجود دارد که شامل حذف داده ها نمی شود. چند نمونه عبارتند از لغو سفارش، بازپرداخت وجه پرداختی، یا باطل کردن یک فاکتور. این عملیات "مخرب" سیستم را به حالت قبلی باز می گرداند. اما از منظر تجاری، شما واقعاً داده ها را حذف نمی کنید.
اگر خطر حذف تصادفی وجود داشته باشد، حذف های نرم مفید هستند. آنها به شما این امکان را می دهند که به راحتی رکوردهای پاک شده را بازیابی کنید.
در هر صورت، در نظر بگیرید که آیا حذف نرم از منظر تجاری منطقی است یا خیر.
Interceptor ها در EF Core
Interceptor ها یارهگیرهای Entity Framework Core (EF Core)، اصلاح و/یا متوقف سازی عملیات EF Core را امکان پذیر می کند. این شامل عملیات سطح پایین پایگاه داده مانند اجرای یک command و همچنین عملیات سطح بالاتر مانند فراخوانی SaveChanges می شود.
Interceptor ها با logging و diagnostic تفاوت دارند زیرا امکان اصلاح یا متوقف کردن عملیات رهگیری را فراهم می کنند. Logging ساده یا Microsoft.Extensions.Logging گزینه های بهتری برای logging هستند.
رهگیرها در هر نمونه DbContext هنگامی که زمینه پیکربندی می شود ثبت می شوند. از شنونده تشخیصی برای به دست آوردن اطلاعات یکسان اما برای همه نمونه های DbContext در فرآیند استفاده کنید.
Interceptor ها یا رهگیرها در هر نمونه DbContext هنگامی که Context پیکربندی می شود ثبت می شوند.
نتیجه گیری
حذف های نرم یا Soft Deleteیک پایگاه داده ایمنی ارزشمندی برای بازیابی داده ها ارائه می دهند و می توانند ردیابی داده های قدیمی را افزایش دهند. با این حال، ارزیابی این که آیا آن ها واقعاً با الزامات خاص برنامه شما مطابقت دارند یا خیر، بسیار مهم است. عواملی مانند اهمیت بازیابی اطلاعات حذف شده، نیازهای حسابرسی و مقررات صنعت خود را در نظر بگیرید. ایجاد یک Filtered Index می تواند عملکرد پرس و جو را در جداول با رکوردهای حذف شده بهبود بخشد.
اگر تصمیم به پیاده سازی که حذف های نرم افزاری یا Soft Delete دارید، EF Core ابزارهای لازم برای اجرای ساده آن را فراهم می کند.
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید