Frage

Ich habe eine Tabelle „Benutzer“ genannt, die eine Spalte namens „gelöscht“, eine Bedingung, die anzeigt, dass der Benutzer „Gelöscht“ aus dem System (ohne es tatsächlich zu löschen, natürlich).

Ich habe auch eine Menge von Tabellen, die eine FK auf die Users.user_id Spalte haben. Subsonic erzeugt (sehr gut), um den Code für alle die Fremdschlüssel in ähnlicher Weise:

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

Während dies gut ist, und alles, ist es eine Möglichkeit, den Code so zu immer auch den „Gelöscht“ Benutzers herausfiltern zu generieren?

Im Büro hier, der einzige Vorschlag, wir denken können, ist eine partielle Klasse zu verwenden und sie zu erweitern. Dies ist offensichtlich ein Schmerz, wenn es sehr viele Klassen der Benutzertabelle verwenden, nicht die Tatsache zu erwähnen, dass es einfach ist, versehentlich die falsche Eigenschaft verwenden (User vs ActiveUser in diesem Beispiel):

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

Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie müssen in Ihrer ActiveRecord.tt Datei folgenden Code ändern und Ihren Code regenerieren:

Im Folgenden Code befindet sich unter: #region ' Foreign Keys '

Update:. Ich habe für Ihren Kommentar aktualisierten Code zu überprüfen, ob Löschspalte vorhanden ist dann nur Löschbedingung gelten

HasLogicalDelete() -. Diese Funktion wird true zurück, wenn die Tabelle hat "gelöscht" oder "isDeleted" Spalte, ansonsten 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;

          <#}#>
    }
}

Andere Tipps

Sind Sie mit Subsonic3? Wenn ja, dann können Sie tatsächlich die Vorlagen bearbeiten, um die Art, wie die Data Access Layer-Klassen generiert werden ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top