Созданный подземный код и всегда фильтрация записей

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

  •  02-10-2019
  •  | 
  •  

Вопрос

У меня есть таблица под названием «пользователи», которые имеют столбец, называемую «удален», логический, указывающий, что пользователь «удален» из системы (не удаляя его, конечно).

У меня также есть много столов, которые имеют fk для столбца users.user_id. Подгрупковые генерируют (очень красиво) код для всех внешних ключей аналогичным образом:

    public IQueryable<person> user
    {
        get
        {
              var repo=user.GetRepo();
              return from items in repo.GetAll()
                   where items.user_id == _user_id
                   select items;
        }
    }

Хотя это хорошо, и все, есть ли способ генерировать код таким образом, чтобы всегда отфильтровывать «удаленные» пользователи?

В офисе здесь единственное предложение, которое мы можем думать, - это использовать частичный класс и продлить его. Это, очевидно, боль, когда есть много классов, использующих пользовательский стол, не говоря уже о том, что легко непреднамеренно использовать неверное свойство (в этом примере пользователь VS 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() - Эта функция вернет True, если таблица «Удалена» или «ISDELETEDED» столбец, False в противном случае.

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;

          <#}#>
    }
}

Другие советы

Вы используете Subsonic3? Если так, то вы на самом деле можете редактировать шаблоны для изменения способа изменения классов доступа к данным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top