Lösungen für eine einfache mandantenfähige Webanwendung mit Entity Framework

Ich entwickle eine mandantenfähige Webanwendung (Stapel: MVC 4 + Entity Framework 4.3). Meine Anforderungen sind ziemlich einfach: Jeder Mandant hat die gleiche Benutzeroberfläche und CodeBase.

In meiner Datenbank habe ich einige Tabellen mit einem TenantId-Feld (und andere Tabellen ohne).

Ich habe ein sehr einfaches generisches Repository eingerichtet:

public class GenericRepository<TEntity> where TEntity : class
{
    internal Database.CRMEntities context;
    internal DbSet<TEntity> dbSet;
    internal int tenantId;

    public GenericRepository(Database.CRMEntities context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
        this.tenantId = 1;
    }

Ich möchte die "get" -Methoden, um nach meiner TenantId zu filtern. Meine Methode zum Einfügen, Aktualisieren und Löschen sollte auch die entsprechende TenantId einschränken.

Meine Entitäten sind automatisch generierte POCO-Klassen.

Ich habe diese Lösungen in Betracht gezogen:

1- GenericRepository sollte eine "ITenant" -Schnittstelle implementieren, die TenantId definiert. Das Problem ist, dass einige Entitäten nicht über die TenantId-Eigenschaft verfügen. Außerdem mag ich es nicht wirklich, die T4-Vorlage zu ändern, die ich zum Generieren von POCO-Objekten verwende, damit sie meine Schnittstelle implementieren

2- Reflexion (aber EF kann es natürlich nicht in eine SQL-Anweisung übersetzen)

if (typeof(TEntity).GetProperty("TenantId") != null)
            query = query.Where(x => (int)   (x.GetType().GetProperty("TenantId").GetValue(x, null)) == tenantId);

Was würden Sie in meinem Fall tun? Ich bin bereit, meine Architektur bei Bedarf zu überdenken.

Danke, Nicola

Antworten auf die Frage(1)

Ihre Antwort auf die Frage