Я работаю над многопользовательским приложением с asp.net mvc. Я должен определить арендатор для каждого запроса, так что я создал класс ниже:Как справиться с этим сценарием в mvc C#?
public class TenantProvider
{
public static Tenant Tenant
{
get
{
Tenant tenant = HttpContext.Current.Items["Tenant"] as Tenant;
if (tenant == null)
{
var tenantUsername = HelperUtility.GetCurrentRequestHost();
//The below line of code is my problem
TenantRepository tenantRepository = new TenantRepository(new AppointContext());
tenant = tenantRepository.GetByUsername(tenantUsername);
HttpContext.Current.Items.Add("Tenant", tenant);
}
return tenant;
}
}
}
Этого класс статического свойство, возвращающее Арендатор для текущего запроса. Сначала он проверяет наличие в кэше арендатора, если не найден, чем если он получит Арендатора из базы данных, инициализирует кеш и возвращает Арендатора.
Для получения Арендатора из базы данных я создаю экземпляр TenantRepository. TenantRepository имеет зависимость от контекста базы данных, которую я передаю при создании своего экземпляра.
Теперь, когда мне нужно выполнить другую операцию с базой данных в текущем Арендаторе, я должен создать новый экземпляр Репозитория в другом месте и должен передать новый Контекст, поэтому фактический контекст, с которым я извлек Арендатора, и новый Контекст отличается тем, что, я думаю, может создать проблему.
Так что мой вопрос: как я могу справиться с этим сценарием, чтобы использовать тот же экземпляр контекста?
Почему не хранить арендатора в претензии? – Swell
@ Хорошо, пожалуйста, уточните свое предложение с помощью ссылки или образца кода? – user1740381
Вот мини-краш-курс по претензиям http://vimeo.com/43549130 Это отличное видео от Доминика Байера. Вы также должны посмотреть на этот проект https://github.com/brockallen/BrockAllen.MembershipReboot из Brock Allen. – Swell