رمز تم إنشاؤه دون الصوت وتصفية السجلات دائمًا

StackOverflow https://stackoverflow.com/questions/2727266

  •  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؟ إذا كان الأمر كذلك ، فيمكنك بالفعل تحرير القوالب لتعديل الطريقة التي يتم بها إنشاء فئات طبقة الوصول إلى البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top