我在使用Unity实现依赖注入和Automapper自动映射对象到DTO的MVC 4应用程序中遇到了Entityframework的问题。我一直在处理各种问题,有时候EF会返回旧数据,因此我认为我的设计不够好。
我拥有以下内容:
在我的Application_Start中配置Unity:
在UnityConfig.RegisterTypes中:
问题:
有时我得到旧数据,来自第一个请求。
当我手动更新 SQL 服务器中的数据时,EF 返回的对象不反映更改。
当我尝试不同的选项时,也会出现关于多个上下文的错误(由于Automapper)。
我的问题:
1. 使用 Unity、MVC4、EF6、存储库和 Automapper 的最佳实践是什么? 2. 在哪里放置代码(例如在 global.asax.c 或 UnityWebApiActivator 的 UnitiConfig.cs 中)? 3. 我需要显式处理dbcontext吗?如果需要的话,在哪里处理?
这方面已经讲了很多东西,但没有一篇文章涵盖所有内容。
我拥有以下内容:
在我的Application_Start中配置Unity:
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())
...
我的代码库使用构造函数依赖注入:
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)。
我的问题:
1. 使用 Unity、MVC4、EF6、存储库和 Automapper 的最佳实践是什么? 2. 在哪里放置代码(例如在 global.asax.c 或 UnityWebApiActivator 的 UnitiConfig.cs 中)? 3. 我需要显式处理dbcontext吗?如果需要的话,在哪里处理?
这方面已经讲了很多东西,但没有一篇文章涵盖所有内容。