Pregunta

Tengo una tabla llamada "usuarios" que tiene una columna llamada "eliminado", un valor lógico que indica que el usuario es "eliminado" del sistema (sin llegar a eliminarla, por supuesto).

También tiene una gran cantidad de tablas que tienen una FK a la columna de Users.user_id. Subsónica genera (muy bien) el código para todas las claves externas de una manera similar:

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

Mientras que esto es bueno y todo, hay una manera de generar el código de tal manera que siempre filtrar los usuarios "borrado" también?

En la oficina de aquí, la única sugerencia que podemos pensar es utilizar una clase parcial y extenderlo. Obviamente, esto es un dolor cuando hay montones y montones de clases utilizando la tabla de usuario, por no mencionar el hecho de que es fácil de usar inadvertidamente la propiedad equivocada (Usuario vs ActiveUser en este ejemplo):

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

¿Alguna idea?

¿Fue útil?

Solución

Es necesario cambiar el código siguiente en el archivo de ActiveRecord.tt y regenerar su código:

A continuación se presenta el código se encuentra debajo: #region ' Foreign Keys '

Actualización:. código He actualizado para su comentario para comprobar si la columna de eliminación está disponible, sólo se aplican condiciones de eliminación

HasLogicalDelete() -. Esta función devolverá verdadero si la tabla ha "borrado" o "isDeleted" columna, falso en caso contrario

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;

          <#}#>
    }
}

Otros consejos

¿Está utilizando Subsonic3? Si es así, en realidad se puede editar las plantillas para modificar la forma en que se generan las clases de capa de acceso de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top