Использование пользовательских функций с табличным значением
Функция с табличным значением доступна только в .NET 4.5 Beta (и сначала недоступна в коде).Их использование по-прежнему не поможет, потому что вам придется использовать функцию в каждом запросе LINQ, так что это то же самое, что и при использовании условия where.
Использование хранимых процедур (но мы на самом деле не хотим, поскольку мы используем ORM, чтобы избежать этого)
Это может быть полезно для некоторых специальныхсложные запросы, но, как правило, это не то, что вы хотите.
Некоторые способы изменения шаблонов, используемых для генерации SQL, для добавления предложения where к каждому оператору.
Слишком сложный и совершенно другой уровень абстракции.
Как изменить шаблоны, используемые для генерации LINQ в контроллерах (мы можем использовать MVC).
Близко к идеальному решению.Вам просто нужно обернуть доступ к вашему набору сущностей в некоторый код, который будет выглядеть следующим образом:
public class MultiTenantAccess<T> where T : IMultitenant
{
private IDbSet<T> set;
...
public IQueryable<T> GetQuery(int tenantID)
{
return set.Where(e => e.TenantID == tenantID);
}
}
Иногда это ядро для чего-то, называемого универсальным репозиторием, но на самом деле это просто оболочка для набора EF.Вы всегда будете использовать GetQuery
для запроса вашего хранилища данных вместо использования DbSet
напрямую.