Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从AutoMapper MapFrom方法进行DBContext调用_Asp.net Mvc_Entity Framework_Dependency Injection_Inversion Of Control_Automapper - Fatal编程技术网

Asp.net mvc 从AutoMapper MapFrom方法进行DBContext调用

Asp.net mvc 从AutoMapper MapFrom方法进行DBContext调用,asp.net-mvc,entity-framework,dependency-injection,inversion-of-control,automapper,Asp.net Mvc,Entity Framework,Dependency Injection,Inversion Of Control,Automapper,我在当前的MVC项目中使用AutoMapper和EF 在我的一些CreateMap调用中,我使用对EF的调用映射一些属性,如下所示: Mapper.CreateMap<Geography, DropdownListViewModel>() .ForMember(dest => dest.Items, opts => opts.MapFrom(src => profileService.GetGe

我在当前的MVC项目中使用AutoMapper和EF

在我的一些CreateMap调用中,我使用对EF的调用映射一些属性,如下所示:

        Mapper.CreateMap<Geography, DropdownListViewModel>()
            .ForMember(dest => dest.Items,
                opts => opts.MapFrom(src => profileService.GetGeographies()));
在本例中,my profileService.GetGeographies方法调用EF来检索地理位置。我的问题是关于profileService及其底层dbContext实例的生命周期管理。AutoMapper是否会在应用程序的整个生命周期中保持对profileService的引用?如果是这样的话,我主要担心的是,我在ProfileService类中使用dbContext的每个请求DI时,底层dbContext将变得过时

使用封装ProfileService的自定义ValueResolver类是一种更好的方法吗?因为我假设每次发生映射时都会实例化这些类?在这种情况下,我可以对IoC容器进行服务定位器调用,以检索dbContext实例,这将为我提供一个每个请求实例

更新

经过进一步审查,我意识到我可以简单地做以下几点:

        Mapper.CreateMap<Geography, DropdownListViewModel>()
            .ForMember(dest => dest.Items,
                opts => opts.MapFrom(src => DependencyResolver.Current.GetService<IProfileService>().GetGeographies()));

这应该允许AutoMapper在每次发生映射时使用新的IProfileService。

我认为这与此类似,在MapFrom调用中调用数据库绝对不是一个好主意。自定义ValueResolver可能更好,但我有一种感觉,即使它实际上可能并不必要。你能发布地理和DropdownListViewModel的内容吗。也许有人可以建议一个更简单的解决方案。最终,这些服务方法中的许多可能会在第一次DB调用后缓存它们的数据,因为这些数据中的大部分很少会更改。但是,在某些情况下,我可能每次都需要连接到一个新的dbContext来进行映射。我认为我在上面发布的更新应该可以做到这一点。与地理类上的ToDropdownListViewModel方法或DropdownListViewModel上的FromGeography方法相比,在这里使用AutoMapper有什么好处?这两个类有许多相同的字段吗?