رمز تم إنشاؤه دون الصوت وتصفية السجلات دائمًا
-
02-10-2019 - |
سؤال
لديّ جدول يسمى "المستخدمين" يحتوي على عمود يسمى "Deleted" ، وهو منطقي يشير إلى أن المستخدم "تم حذفه" من النظام (دون حذفه فعليًا ، بالطبع).
لديّ أيضًا الكثير من الجداول التي تحتوي على FK للمستخدمين. user_id. يولد Subsic (بشكل جيد للغاية) رمز جميع المفاتيح الأجنبية بطريقة مماثلة:
public IQueryable<person> user
{
get
{
var repo=user.GetRepo();
return from items in repo.GetAll()
where items.user_id == _user_id
select items;
}
}
في حين أن هذا أمر جيد وكل شيء ، هل هناك طريقة لإنشاء الكود بطريقة هذه دائمًا لتصفية المستخدمين "المحذوفين" أيضًا؟
في المكتب هنا ، فإن الاقتراح الوحيد الذي يمكننا التفكير فيه هو استخدام فئة جزئية وتوسيعه. من الواضح أن هذا ألم عندما يكون هناك الكثير والكثير من الفئات باستخدام جدول المستخدم ، ناهيك عن حقيقة أنه من السهل استخدام الخاصية الخاطئة عن غير قصد (المستخدم مقابل ActiveUser في هذا المثال):
public IQueryable<User> ActiveUser
{
get
{
var repo=User.GetRepo();
return from items in repo.GetAll()
where items.user_id == _user_id and items.deleted == 0
select items;
}
}
أيه أفكار؟
المحلول
تحتاج إلى تغيير الكود التالي في ملف ActivereCord.tt الخاص بك وتجديد الكود الخاص بك:
يتبع الكود تحت: #region ' Foreign Keys '
تحديث: لقد قمت بتحديث التعليمات البرمجية لتعليقك للتحقق مما إذا كان عمود حذف متاحًا ، ثم قم بتطبيق شرط الحذف فقط.
HasLogicalDelete()
- ستعود هذه الوظيفة بشكل صحيح إذا كان الجدول قد "تم حذفه" أو "iSdeleted" ، خطأ خلاف ذلك.
public IQueryable<<#=fk.OtherClass #>> <#=propName #>
{
get
{
var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo();
<#if(tbl.HasLogicalDelete()){#>
return from items in repo.GetAll()
where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#> && items.deleted == 0
select items;
<#}else{#>
return from items in repo.GetAll()
where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#>
select items;
<#}#>
}
}
نصائح أخرى
هل تستخدم Subong3؟ إذا كان الأمر كذلك ، فيمكنك بالفعل تحرير القوالب لتعديل الطريقة التي يتم بها إنشاء فئات طبقة الوصول إلى البيانات.