Tag: #automapper

如何使用Unity注册AutoMapper配置文件

我有以下AutoMapper配置文件: public class AutoMapperBootstrap : Profile { protected override void Configure() { CreateMap().ForMember(x => x.NewsArticles, opt => opt.MapFrom(y => y.RssFeedContent)); CreateMap().ForMember(x => x.Id, opt => opt.Ignore()); } } 我正在初始化它: var config = new MapperConfiguration(cfg => { cfg.AddProfile(new AutoMapperBootstrap()); }); container.RegisterInstance(“Mapper”, config.CreateMapper()); 当我尝试在我的构造函数中注入它时: private IMapper _mapper; public RssLocalRepository(IMapper mapper) { _mapper = mapper; } 我收到以下错误: 当前类型AutoMapper.IMapper是一个接口,无法构造。 […]

使用AutoMapper在构造函数中注入父类映射子类

我有以下类结构: class SrcChild { public bool SomeProperty { get; set; } } class SrcParent { public IEnumerable Children { get; set; } } 所以SrcParent有一个SrcChild对象的集合。 现在我想将SrcParent的实例映射到DstParent。 以下是目标类: class DstChild { public bool SomeProperty { get; set; } public DstChild(DstParent parent) { if (parent == null) throw new ArgumentNullException(); } } class DstParent { public IEnumerable Children […]

Automapper忽略只读属性

我正在尝试从一个对象映射到另一个具有公共只读Guid Id的对象,我想忽略它。 我试过这样的: Mapper.CreateMap() .ForMember(dto => dto.Id, opt => opt.Ignore()); 这似乎失败了因为Id是只读的: AutoMapperTests.IsValidConfiguration threw exception: System.ArgumentException: Expression must be writeable 有没有办法解决?

在Azure函数中初始化AutoMapper

我正在尝试创建一个Azure函数,我在其中使用AutoMapper的一些代码。 我是C#,Azure和AutoMapper的新手,我在找到初始化AutoMapper配置的正确方法时遇到了一些麻烦。 MapInitializer.cs: public static class MapInitializer { public static void Activate() { Mapper.Initialize(cfg => { // initialize mappings here }); } } 然后在我的函数中,我尝试执行以下操作: Function.cs: public static class ProcessQueueForIntercom { [FunctionName(“ProcessQueue”)] public static void Run([QueueTrigger(“messages”)]string myQueueItem, TraceWriter log) { MapInitializer.Activate(); // rest of the code } } 现在的问题是,我第一次使用此function处理消息时,一切顺利,代码按照我的预期运行。 但是,从第二次开始,我收到一条错误,说我的配置已经初始化。 但我真的不知道如何使用Azure函数正确地执行此操作,因为通常您会在App Startup中初始化它,但我认为Azure Functions(CMIW)没有这样的东西,并且我没有找到关于如何做到这一点的更多信息。 我正在考虑用try catch围绕Activate()调用,只记录配置已经加载的警告,但这似乎不是很干净……

哪种方法最好? AutoMapper反对隐式(C#参考)

Automapper是一种匹配类型的方法,理想情况下,当您想要映射模型及其视图模型时。 但这与C#中隐含的方法不一样吗? (假设两个模型具有相同的属性但名称不同,在这种情况下,您需要在AutoMapper中指定哪个模型之间链接) 我们有autommaper public class Employee { public string Name { get; set; } public string Email { get; set; } } public class EmployeeViewItem { public string Name { get; set; } public string Email { get; set; } } 通常我们这样做: Employee employee = new Employee { Name = “John SMith”, Email = […]

Automapper项目使用

我目前正在后端使用automapper将对象映射到模型。 我最近决定使用以下代码来处理所有时区转换: cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours)); cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value); Object.ProjectTo().SingleOrDefault(); 然后它工作正常,对象被映射和时区转换 但是当我在业务层中使用以下代码来执行单个对象映射时: Mapper.Map(singleRecord); 它给出了一个错误:只能从LINQ to Entities调用此函数。 堆栈跟踪 : at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue) at lambda_method(Closure , DateTime , DateTime , ResolutionContext ) at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination) at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext ) Mapper.Map在特定场景中很重要,我也不想投影单个记录。 这有什么方法吗?

AutoMapper:ForMember()和ForPath()有什么区别?

对不起我的英文 我正在阅读AutoMapper的ReverseMap() ,无法理解ForMember()和ForPath()之间的区别。 在我用ForMember()实现的经验中描述了实现。 例如,在我配置反向映射的代码之后: public class Customer { public string Surname { get; set; } public string Name { get; set; } public int Age { get; set; } } public class CustomerDto { public string CustomerName { get; set; } public int Age { get; set; } } static void Main(string[] args) { […]

使用automapper从两个项目映射

在我的数据层中,我有一个存储库,可以返回这样的项目列表: new List { new Item { Title = “Something”, DetailId = 500 }, new Item { Title = “Whatever”, DetailId = 501 }, } 存储库有另一种方法,可以在给定项目详细信息ID时返回这些项目的详细信息: // repository.GetDetail(500) would return something like: new ItemDetail { Id = 500, Size = “Large” } 现在,在我的服务层中,我想将上面的列表映射成如下所示: new List { new ServiceItem { Title = “Something”, Size = “Large” […]

Automapper – ReverseMap()不执行映射

我有以下两个class级: public class ReferenceEngine { public Guid ReferenceEngineId { get; set; } public string Description { get; set; } public int Horsepower { get; set; } } public class Engine { public Guid Id { get; set; } public string Description { get; set; } public int Power { get; set; } } 我使用automapper来执行从ReferenceEngine到Engine的映射,反之亦然。 请注意,属性ReferenceEngineId […]

AutoMapper,如何在映射对象之间保持引用?

我正在使用AutoMapper将UI模型转换为POCO,后来我使用DataContractSerializer将其序列化为XML,以便保留它们之间的引用。 问题是,在映射时, 这些实体之间的引用会丢失 。 UI类相互引用,但映射过程为每个引用创建新实例,因此原始关系被破坏:( 让我解释: 我有2个Person类型的实体 Person { List OwnedHouses } 而这2个对象 拥有的约翰 House1 谁也拥有谁 House1 当AutoMapper正确映射每个Person时,但它也将House1映射为两个不同的实例!! 所以我有两份House1。 John拥有他的House1(#1)并且Will拥有他的House1(#2)。 他们不再联系了。 有没有办法保持最初存在的关系? 谢谢。 编辑:其实我的拥有是这样的: 文档包含ChildDocuments列表。 每个ChildDocument都有一个Designables列表(Rectangles,Lines,Ellipses …)和一个名为ChildDocumentAdapter的特殊设计,它包含自己的ANOOTHER ChildDocument。 这是麻烦,它可以引用另一个ChildDocument。