Tag: #automapper

Automapper ResolveUsing导致“无法将此解析为可查询表达式”

我正在使用autommaper将域类映射到模型类,反之亦然。 我需要加密/解密一个属性。 当我将模型映射到域时没有问题,完美地工作: Mapper.CreateMap().ForMember(dest => dest.Password, opt => opt.ResolveUsing(src => this.EncryptString(src.Password))) 但是当将实体映射到模型的automapper崩溃并抛出“无法将其解析为可查询表达式”时: Mapper.CreateMap().ForMember(dest => dest.Password, opt => opt.ResolveUsing(src => this.DecryptString(src.Password))) 我也尝试过自定义值解析器,结果相同: Mapper.CreateMap().ForMember(dest => dest.Password, op => op.ResolveUsing().FromMember(x => x.Password)); public class PasswordResolver : ValueResolver { protected override string ResolveCore(object source) { return “TEST”; } }

自动映射 – 忽略条件映射

我正在使用automapper,我想知道当该字段为空时是否可以忽略字段的映射。 那是我的代码: .ForMember(dest => dest.BusinessGroup_Id, opt => opt.MapFrom(src => (int)src.BusinessGroup)) src.BusinessGroup type = “enum” dest.BusinessGroup_Id = int 目标是,如果src.BusinessGroup = null,那就是映射。

AutoMapper是区分大小写还是不敏感?

如果对象a具有名为“Id”的属性而对象b具有名为“ID”的属性,那么AutoMapper是否会正确映射这两个属性(不进行.ForMember(…)调用)?

我可以使用automapper将多个对象映射到目标对象

UserAccount objUserAccount=null; AutoMapper.Mapper.CreateMap(); objUserAccount = AutoMapper.Mapper.Map(lstAcc[0]); 到目前为止,它正在映射AccountBO属性。 现在我必须将对象objAddressBO属性映射到目标,包括上面的映射值。 为此,我在上面的代码行中编写了如下代码。 AutoMapper.Mapper.CreateMap(); objUserAccount=AutoMapper.Mapper.Map(objAddressBO); 但它丢失了第一次映射值并仅返回最后一次映射值。 请让我知道我需要做哪些更改才能在目标对象中同时包含这两个值。

下载菜单中的自动映射IEnumerable

问题 我目前正在为我的MVC项目添加自动化,而且我被困住了。 现在我有一个User模型用于表示数据库中的数据。 我必须将该模型映射到EditUserModel,它将在调用Edit方法时使用。 EditUserModel有IEnumerable (对于下拉菜单),我似乎无法弄清楚如何映射。 试图解决方案 截至目前,我还没有尝试过任何事情。 我不确定IEnumerable的最佳位置在哪里或填充它的位置。 现在它正在控制器中填充。 User.cs public class User { [Key] public int UserID { get; set; } public string Username { get; set; } public string Password { get; set; } public int RoleID { get; set; } [ForeignKey(“RoleID”)] public virtual Role Role { get; set; } } EditUserModel.cs […]

Automapper,generics,dto funtimes

这是交易: 我有一个报表设计器,用户可以根据某些预定义的数据集创建报表。 他们可以选择要包含在报表中的一组列,然后在运行报表时,通过使用automapper将NHibernate集合映射到dto类集合来创建IList。 这个问题是DTO集合有一堆冗余列,因为它将填充所有数据,无论是否需要它。 我的解决方案? 为什么不在运行时使用我们拥有的信息创建DTO类型,并仅使用所需的属性将nhibernate集合映射到动态创建的DTO集合: #region create a dto type: AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = “tmpAssembly”; var assemblyBuilder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); ModuleBuilder module = assemblyBuilder.DefineDynamicModule(“tmpModule”); // create a new type builder TypeBuilder typeBuilder = module.DefineType(“ReportDto”, TypeAttributes.Public | TypeAttributes.Class); foreach (var propertyName in propNames) { // Generate a private field FieldBuilder field = […]

在自定义映射中调用IMappingEngine.Map

使用AutoMapper,当使用ConvertUsing为容器类型定义自定义映射时,我经常需要在映射函数中调用IMappingEngine.Map。 这是必要的,因为它允许我重用子映射的定义。 CreateMap() .ConvertUsing(o => new OrderModel( o.Id, o.ShippingAddress, mapper.Map<IList>(o.Items) )); 为了做到这一点,我需要一个IMappingEngine的引用。 在配置映射引擎时,我没有可以在ConvertUsing参数中捕获的引用。 一个简单的解决方案是在某个地方有一个静态引用,但我想避免它。 有没有办法在使用ConvertUsing的映射中获取对当前IMappingEngine的引用?

自动映射多对多stackoverflowexception

我正在为以下映射获得堆栈溢出: Mapper.CreateMap() .ForMember(x => x.Children, o => o.MapFrom(x => x.Children.ConvertToChildrenViewModel())); Mapper.CreateMap() .ForMember(x => x.Parents, o => o.MapFrom(x => x.Parents.ConvertToParentViewModel())); 我理解为什么会发生这种情况,这显然是一个无限循环。 我怎么能让它在automapper中工作? 我需要父母了解他们的孩子和他们的孩子,以了解他们的父母。 我是否必须为不包含Parents.Children属性的Children.Parents创建另一个ViewModel ? 扩展方法示例,类似于儿童: public static IList ConvertToParentViewModel(this IEnumerable parents) { return Mapper.Map<IList>(parents); }

自动映射多对多映射

帕特里克,感谢关于正确问题的建议! 编辑1: 我有三张桌子可供多对多关系。 像这样: GoodEntity: public partial class GoodEntity { public GoodEntity() { this.GoodsAndProviders = new HashSet(); } public int id { get; set; } public string name { get; set; } public string description { get; set; } public decimal cost { get; set; } public Nullable price { get; set; } public virtual […]

AutoMapper:PreserveReferences和MaxDepth有什么区别?

我有点困惑。 我无法找出PreserveReferences和MaxDepth之间的区别。 假设我们有以下DTO和模型。 public class PersonEntity { public PersonEntity InnerPerson { get; set; } } public class PersonModel { public PersonModel InnerPerson { get; set; } } 如文档中所述: 以前,AutoMapper可以通过跟踪映射的内容来处理循环引用,并在每个映射上检查源/目标对象的本地哈希表,以查看该项是否已映射。 事实certificate,这种跟踪非常昂贵,您需要使用PreserveReferences选择使用圆形贴图才能工作。 或者,您可以配置MaxDepth。 我的映射: cfg.CreateMap().MaxDepth(1); cfg.CreateMap(); 程序: var personModel = new PersonModel(); personModel.InnerPerson = personModel; var entity = Mapper.Map(personModel); 这就是我期望得到的: 这就是我实际得到的: 我可以使用它们( PreserveReferences和MaxDepth )来解析循环引用,但我没有看到区别。 什么时候我应该在MaxDepth方法中使用不同的深度? 那么,有人能提供吗? 提前致谢。