Я борюсь с Entityframework в приложении MVC 4, используя Unity for Dependency injection и Automapper для автоматического преобразования объекта в DTO. Я бегу от одной проблемы к другой, EF иногда возвращает старые данные, поэтому я думаю, что мой дизайн недостаточно хорош.Что лучше всего подходит для использования Unity с Entity Framework в приложении MVC 4
Что я имею:
Для настройки Unity я в моем Application_Start:
var UnityContainer = UnityConfig.GetConfiguredContainer();
Mapper.Initialize(cfg => cfg.ConstructServicesUsing(type => UnityContainer.Resolve(type)));
UnityContainer.Resolve<AutoMapperConfig>().MapAutoMapper();
...
В UnityConfig.RegisterTypes:
container.RegisterType<IMyContext, MyContext>(new ContainerControlledLifetimeManager())
...
Мои репозитариев используют инъекции depencency конструктор:
public class MSSQLTenantRepository : IDalTenantRepository
{
private readonly IMyContext _Db;
public MSSQLTenantRepository(IMyContext db)
{
Db = db;
}
...
И моя инъекция использовать контроллер конструктора зависимости тоже:
public class TenantController : Controller
{
private readonly ITenantRepository _TenantRepository;
public TenantController(ITenantRepository tenantRepository,
{
_TenantRepository = tenantRepository;
}
...
Automapper конфигурация:
public class AutoMapperConfig
{
private readonly ITenantRepository _TenantRepository;
public AutoMapperConfig(ITenantRepository tenantRepository)
{
_TenantRepository = tenantRepository;
}
...
Вопросов: иногда я получаю старые данные из первого запроса.
Когда я вручную обновить данные в де сервера SQL, возвращая объект EF в не отражают изменения
Когда я пробовал разные варианты, я также получил ошибку о множественном контексте (из-за Automapper)
Мои вопросы:
- Что лучше всего использовать Unity, MVC4, EF 6, хранилища и Automapper?
- Где поставить код (например, в global.asax.c или в UnitiConfig.cs из UnityWebApiActivator
- Нужно ли мне явно распоряжаться DbContext, и если это так? Где это сделать
Существует много говорят об этой теме, но ничего не покрывает все.
Похоже, что вы можете делиться контекстом «не потокобезопасным» ... если вы не хотите полностью управлять контекстом, вы должны использовать подход Unit of Work, как правило, в инструкции Using. –
Это будет работать, когда мое приложение имеет PartialViews? Я боюсь, что либо контроллер располагает контекстом, в то время как другой контроллер нуждается в нем, либо два контекста отслеживают один и тот же объект. Я просмотрел http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns -in-asp-net-mvc-application для возможной реализации. – RHAD