Созданный подземный код и всегда фильтрация записей
-
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? Если так, то вы на самом деле можете редактировать шаблоны для изменения способа изменения классов доступа к данным.