将 AutoMapper 注入其他层的正确方法是什么?
我读了这篇博文,但这段代码导致下面的异常
AutoMapper.dll 中发生“AutoMapper.AutoMapperMappingException”类型的异常,但未在用户代码中处理
当尝试在服务层映射时。
List<StudentViewModel> list2 = _mapper.Map<List<StudentViewModel>>(list);
Run Code Online (Sandbox Code Playgroud)
我的 AutoFac 配置如下:
public static class DependencyRegistration
{
public static void Config()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<TypeMapFactory>().As<ITypeMapFactory>();
builder.RegisterType<ConfigurationStore>().As<ConfigurationStore>().WithParameter("mappers", MapperRegistry.Mappers).SingleInstance();
builder.Register((ctx, t) => ctx.Resolve<ConfigurationStore>()).As<IConfiguration>().As<IConfigurationProvider>();
builder.RegisterType<MappingEngine>().As<IMappingEngine>();
//...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
Run Code Online (Sandbox Code Playgroud) 这是什么意思:
IEnumerable<int> query = from num in list
where num < 3
select num;
Run Code Online (Sandbox Code Playgroud)
这是IEnumerable <T>的对象吗?
任何人都可以形容这个吗?
每当我们想使用IEnumerable扩展方法而不是IQueryable版本时,我们都使用AsEnumerable()方法.
var list = context.Details.AsEnumerable().Where(x => x.Code == "A1").ToList();
Run Code Online (Sandbox Code Playgroud)
为什么DbSet使用IQueryable版本的方法默认情况下,其他版本可用时(Where,Select,...)?
此代码导致NotSupportedException.
var detailList = context.Details.Where(x => x.GetType().GetProperty("Code").GetValue(x,null).ToString() == "00101").ToList();
Run Code Online (Sandbox Code Playgroud)
但是这段代码可行.
var detailList = context.Details.AsEnumerable().Where(x => x.GetType().GetProperty("Code").GetValue(x,null).ToString() == "00101").ToList();
Run Code Online (Sandbox Code Playgroud)
MSDN说:
- AsEnumerable()返回输入为IEnumerable的输入
那么为什么我们需要使用AsEnumerable()方法呢?
c# ×4
linq ×3
ienumerable ×2
.net ×1
asp.net-mvc ×1
autofac ×1
automapper ×1
iqueryable ×1
lambda ×1