Решения для простого мультитенантного веб-приложения с структурой сущностей

Я разрабатываю мультитенантное веб-приложение (стек: MVC 4 + Entity Framework 4.3). Мои требования довольно просты: у каждого арендатора одинаковый интерфейс и кодовая база.

В моей базе данных у меня есть несколько таблиц с полем TenantId (и другие таблицы без).

Я создал очень простой общий репозиторий:

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

Я хотел бы получить "получить" методы фильтрации для моего tenantId. Мой метод вставки, обновления и удаления также должен ограничивать соответствующий TenantId.

Мои сущности являются автоматически сгенерированными классами POCO.

Я рассмотрел эти решения:

1- GenericRepository должен реализовывать «ITenant» интерфейс, который определяет TenantId. Проблема заключается в том, что некоторые объекты не получили свойство TenantId. Кроме того, мне не очень нравится изменять шаблон T4, который я использую для генерации объектов POCO, чтобы они реализовали мой интерфейс.

2- Отражение (но, конечно, EF не может перевести его в оператор SQL)

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

Что бы вы сделали в моем случае? Я готов пересмотреть мою архитектуру, если это необходимо.

Спасибо, Никола

Ответы на вопрос(1)

Ваш ответ на вопрос