У нас есть мультитенантная база данных на уровне строк. Предыдущее приложение было разработано с использованием EF с классом DataContext, и нам удалось создать экстент класса, который будет иметь фильтр на глобальном уровне, например
public EFDbContext(int tenantID = 0) : base("name=WMSEntities") //Constructor of the class always expect a tenantID
{
//tenantID = int.Parse(System.Security.Claims.ClaimsPrincipal.Current.FindFirst("tenantid").Value);
//Here, the Dbset can expose the unfiltered data
Tenants = new FilteredDbSet<Tenant>(this);
//From here, add all the multitenant dbsets with filtered data
Items = new FilteredDbSet<Item>(this, d => d.TenantID == tenantID);
}
Но это конкретное приложение использует DBML, LINQ to SQL, где наследующий класс DbContext не работает. Большинство примеров здесь основаны на EF, а не на LINQ To SQL.
. Оцените, как этого добиться, используя LINQ To SQL, или мне лучше изменить этот EF?