Tag: #automapper

AutoMapper排除字段

我正在尝试将一个对象映射到另一个对象,但对象非常复杂。 在开发过程中,我希望能够排除一堆字段并逐个访问它们,或者能够指定仅映射我想要的字段并在每次测试成功时增加它们。 所以: class string field1 string field2 string field3 现在我想映射field1 ,测试,修复然后移动到field2然后field3 。 这可能吗?

将异步模型集映射到异步ViewModel集合

我正在使用一个项目,我需要使用Async编程C#。 我在Model和ViewModel之间使用Automapper进行映射。 对于异步数据,我创建了一个map方法,如下所示: public static async Task<IEnumerable> ModelToViewModelCollectionAsync(this Task<IEnumerable> persons) { return await Mapper.Map<Task<IEnumerable>, Task<IEnumerable>>(persons); } 我将此映射方法称为如下(在我的服务类中): public async Task<IEnumerable> GetAllAsync() { return await _personRepository.GetAllAsync(“DisplayAll”).ModelToViewModelCollectionAsync(); } 最后我在控制器内调用了我的服务类。 public async Task Index() { return View(await PersonFacade.GetAllAsync()); } 但是当我运行我的项目时,它会向我显示以下exception Missing type map configuration or unsupported mapping. Mapping types: Task`1 -> Task`1 System.Threading.Tasks.Task`1[[System.Collections.Generic.IEnumerable`1[[PF.Model.Person, PF.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, […]

entity framework,AutoMapper,处理实体更新

我最近刚开始使用Entity Framework 1.0,并相信我开始感受到每个人都在谈论的痛苦。 我正在尝试使用最佳实践,因此我有一组DTO通过AutoMapper映射到我的实体和从我的实体映射。 真正的问题是当我试图更新一个对象时。 第一个问题是我找不到创建新实体的方法,从我的DTO传输数据,并且仍然让实体ObjectContext意识到它已被更改。 我使用了以下代码: public VideoDTO UpdateVideo(VideoDTO pVideo) { Video video = new Video(); Mapper.Map(pVideo, video); context.Attach(video); //Successfully attaches context.ApplyPropertyChanges(“Videos”, video); // no changes made as far as entity knows b/c it was attached in it’s updated state context.SaveChanges(); //doesn’t save the entity return pVideo; } 然后我想,也许我需要先从数据库中获取实体,附加到上下文,在Mapper上调用Map方法,然后调用SaveChanges。 我在这做了什么: public VideoDTO UpdateVideo(VideoDTO pVideo) […]

通过ASP.NET身份2中的UserManager.Update()更新用户

我在MVC 5项目中使用ASP.NET Identity 2 ,我想使用UserManager.Update()方法更新Student数据。 但是,当我从ApplicationUser类inheritance时,我需要在调用update方法之前将Student映射到ApplicationUser 。 另一方面,当使用我也用于创建新Student的方法时,由于并发性而导致错误,因为我创建了一个新实例而不是更新。 由于我无法使用AutoMapper解决问题,我需要一个稳定的修复来解决问题,而无需AutoMapper 。 能否请您澄清如何解决这个问题? 我将StudentViewModel传递给StudentViewModel中的Update方法,然后我需要将它映射到Student,然后将它们作为ApplicationUser传递给UserManager.Update()方法。 另一方面,我想知道我是否应该在Controller阶段检索并发送密码,而不是为安全问题转到View? 你能否告诉我这个问题(在用户更新期间我不更新密码,我必须在数据库中保留用户的密码)。 任何帮助,将不胜感激。 实体类: public class ApplicationUser : IdentityUser, IUser { public string Name { get; set; } public string Surname { get; set; } //code omitted for brevity } public class Student: ApplicationUser { public int? Number { get; set; } } […]

Automapper错误说mapper未初始化

我正在使用Automapper 5.2。 我用这个链接作为基础。 我将逐步描述设置我所经历的Automapper的过程。 首先我按照指示将Automapper添加到Project.json: PM> Install-Package AutoMapper 其次,我创建了一个文件夹来保存与映射相关的所有文件“Mappings” 第三,我在自己的mappings文件夹文件中设置了Automapper的配置: public class AutoMapperConfiguration { public MapperConfiguration Configure() { var config = new MapperConfiguration(cfg => { cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); }); return config; } } Forth还在mappings文件夹中的自己的文件中,我设置了映射配置文件,如下所示: public class DomainToViewModelMappingProfile : Profile { public DomainToViewModelMappingProfile() { CreateMap() .ForMember(vm => vm.Creator, map => map.MapFrom(s => s.Creator.Username)) .ForMember(vm => vm.Jobs, […]

AutoMapper并将日期时间转换为字符串

我无法理解以下问题。 我有一种感觉它是LINQ和表达式树的限制,但不确定如何接受lambda体。 我可以在不创建自定义转换器的情况下实现此目的 Mapper.CreateMap() .ForMember(x => x.DateCreated, opt => opt.MapFrom(src => { var dt = (DateTime)src.DateCreated; return dt.ToShortDateString(); })); 我收到此错误: 带有语句主体的lambda表达式无法转换为表达式树

AutoMapper:如何从String解析Int并可能根据数据类型创建规则?

我的表单有两个模型,一个ViewModel,以及一个来自它的ControlModel。 ControlModel具有所有相同的字段名称和层次结构,但所有字段都是字符串数据类型。 你如何编写AutoMapper将字符串字段转换为整数? 我尝试了Int32.Parse(myString)但是Int32在表达式中不可用(给出错误)。 Mapper.CreateMap() .ForMember(dest => dest.myInteger, opt => opt.MapFrom(src => src.myString)); 类中的类型及其对应的转换类型: string to int,int?,double,double?,DateTime和bool 另外,有没有办法以一种方式来推广映射,使用该函数解析目标中的所有整数? 换句话说,有没有办法为数据类型创建映射? 编辑: 这很有希望: AutoMapper.Mapper.CreateMap() .ConvertUsing(src => Convert.ToInt32(src)); 编辑:这篇文章真的很有帮助

如何将AutoMapper与Ninject.Web.Mvc一起使用?

建立 我有一个AutoMapperConfiguration静态类,用于设置AutoMapper映射: static class AutoMapperConfiguration() { internal static void SetupMappings() { Mapper.CreateMap.ConvertUsing<IdToEntityConverter>(); } } 其中IdToEntityConverter是一个自定义的ITypeConverter ,如下所示: class IdToEntityConverter : ITypeConverter where T : Entity { private readonly IRepository _repo; public IdToEntityConverter(IRepository repo) { _repo = repo; } public T Convert(ResolutionContext context) { return _repo.GetSingle(context.SourceValue); } } IdToEntityConverter在其构造函数中获取IRepository ,以便通过命中数据库将ID转换回实际实体。 请注意它没有默认构造函数。 在我的ASP.NET的Global.asax ,这就是我对OnApplicationStarted()和CreateKernel() : protected override void […]

AutoMapper:手动设置属性

我使用AutoMapper从平面DataObjects映射到胖BusinessObjects,反之亦然。 我注意到,由于BusinessObjects的更改通知(使用自定义validation实现INotifyPropertyChanged等),从DataObjects到BusinessObjects的映射需要额外的时间。 因为我在映射期间通常不需要更改通知,所以我想将其关闭。 所以我添加了一个属性“IsPropertyChangedEnabled”。 如果此属性设置为false,则不会引发NotifyPropertyChanged事件并保存时间。 题: 我可以告诉AutoMapper在映射过程的最开始将此属性设置为false吗? 如果是这样,怎么样? 谢谢!

配置AutoMapper以映射到具体类型,但允许在我的类的定义中使用接口

我有一些类似于下面的代码。 基本上它表示从Web服务获取数据并将其转换为客户端对象。 void Main() { Mapper.CreateMap(); Mapper.CreateMap(); // Service side var hasSomethingFromWeb = new HasSomethingFromWebService(); hasSomethingFromWeb.Something = new SomethingFromWebService { Name = “Whilly B. Goode” }; // Client Side HasSomething hasSomething=Mapper.Map(hasSomethingFromWeb); } // Client side objects public interface ISomething { string Name {get; set;} } public class Something : ISomething { public string Name {get; […]