Question

J'ai une table appelée « Utilisateurs » qui a une colonne appelée « supprimé », un booléen indiquant que l'utilisateur est « supprimé » du système (sans supprimer réellement, bien sûr).

J'ai aussi beaucoup de tables qui ont une FK à la colonne utilisateurs.id_utilisateur. Subsonic génère (très bien) le code pour toutes les clés étrangères d'une manière similaire:

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

Alors que cela est bon et tout, est-il un moyen de générer le code de manière à toujours filtrer les utilisateurs « supprimé » aussi?

Dans le bureau ici, la seule suggestion que nous pouvons penser est d'utiliser une classe partielle et l'étendre. Ceci est évidemment une douleur quand il y a beaucoup, beaucoup de classes en utilisant la table de l'utilisateur, sans parler du fait qu'il est facile à utiliser, par inadvertance, la mauvaise propriété (utilisateur vs ActiveUser dans cet exemple):

    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;
        }
    }

Toutes les idées?

Était-ce utile?

La solution

Vous devez modifier le code suivant dans votre fichier ActiveRecord.tt et régénérer votre code:

code suivant est se trouve sous: #region ' Foreign Keys '

Mise à jour:. Je suis code mis à jour pour votre commentaire pour vérifier si la colonne de suppression est disponible puis appliquez seule condition de suppression

HasLogicalDelete() -. Cette fonction retourne vrai si la table a "supprimé" ou "isDeleted" colonne, sinon 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;

          <#}#>
    }
}

Autres conseils

Utilisez-vous Subsonic3? Si oui, alors vous pouvez réellement modifier les modèles pour modifier la façon dont les classes de la couche d'accès aux données sont générées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top