automapper

.NET Core Dto映射(AutoMapper)

南笙酒味 提交于 2020-04-22 17:08:18
.Net Core Dto映射(AutoMapper) 我们假设一个场景, 采用EF Core+Web Api, 这时候可能会出现EF Core中的Entity Model和在项目中使用的Model之间对应关系出现偏差, 如果使用属性意一一对应, 不免会有大量的工作量, 上代码 EntityModels.Employee.cs public class Employee { public Guid Id { get; set; } public Guid CompanyId { get; set; } public string EmployeeNo { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public Gender Gender { get; set; } public DateTime DateOfBirth { get; set; } public Company Company { get; set; } } Models.EmployeeDto.cs public class EmployeeDto { public Guid Id { get; set; } public Guid CompanyId { get; set; }

abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)

十年热恋 提交于 2020-04-18 08:42:23
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四) abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五) 通过前面三篇文章的介绍,我们学习了如何创建实体,如何创建数据库操作,如何创建应用服务。在上一文章中我们在应用层实现了对数据库的CURD操作。在本篇文章中,主要是使用常规的MVC方式来实现增删改查的功能,通过完善Controller、View、ViewModel,以及调试修改控制器来实现展示层的增删改查。最终实现效果如下图: 一、创建ModuleController ABP对ASP.NET Net Core MVC Controllers进行了集成,通过ABP网站创建的项目会自动创建一个Controller基类,这个Controller基类继承自AbpController, 我们即可使用ABP附加给我们的以下强大功能: 本地化 异常处理

ABP大型项目实战(2)

自闭症网瘾萝莉.ら 提交于 2020-04-18 07:23:51
这是《 ABP大型项目实战 》系列文章的一篇。 项目发布到生产环境后难免会有错误。 那么如何进行调试和排错呢? 我看到俱乐部里有人是直接登陆生产服务器把数据库下载到开发机器进行调试排错。 这种办法是不适用于大型项目的: 首先,大型项目(特别是全球都有分公司的大型项目)很有可能24小时都有人在使用。所以尽量避免直接登录生产服务器操作,就算部署,也应该用DevOps、蓝绿部署等办法。 另外,如果大型项目有采用金丝雀发布和A/B测试,那么把数据库下载到开发机器这种方法是很不适用的。 即使大型项目没有采用金丝雀发布和A/B测试,也不适合把数据库下载到开发机器进行调试排错。因为数据库有可能很大,网络传输需要时间,特别是连VPN的时候,甚至有可能要从欧洲传到中国,又要从中国回传到欧洲。 生产环境数据库下载后为了安全还需要脱敏,这也需要时间。 还有其他方法,但是这些方法都存在一个问题,就是时光不能倒流,很多时候你是不可能叫客户回来重现一遍操作流程来复现bug的。 那么有什么好办法呢? 有的,通过查看日志来调试与排错。 ABP在这方面做得不错,内置了审计日志,提供了详细日志基类。嗯,这是两块内容了,一篇文章是讲不完的,所以我分开多篇文章来讲。 先从审计日志开始吧。 不得不说,ABP在这方面做得很好,审计日志是透明的,你要关闭审计日志反而要写代码控制。当然,这里不建议关闭审计日志。 然而

AutoMapper dependency injection with parameters

坚强是说给别人听的谎言 提交于 2020-04-16 03:30:12
问题 Error: No parameterless constructor for AutoMapperConfiguration I am using the nuget package automapper DI public class AutoMapperConfiguration : Profile { private readonly ICloudStorage _cloudStorage; public AutoMapperConfiguration(ICloudStorage cloudStorage) { _cloudStorage = cloudStorage; // Do mapping here } } public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ICloudStorage, AzureStorage>(); services.AddAutoMapper(); // Errors here } How do I use the

【5min+】 对象映射只有AutoMapper?试试Mapster

谁说我不能喝 提交于 2020-04-15 08:52:57
【推荐阅读】微服务还能火多久?>>> 系列介绍 【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。 5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。 正文 一谈到如何在.Net中进行对象映射,可能大部分同学都会脱口而出:“使用AutoMapper!”。 是的,AutoMapper 是一个非常成熟的 对象映射器 。截至到写这篇文章,您能在Nuget上下载到的AutoMapper包的版本为:v9.0.0,而对应的 Github 的 star 已经高达7K。 对了,谈到AutoMapper就不得不谈起它的作者(之一):“JIMMY BOGARD”。也许您没有听过这个名字,但是您一定听过他的另一个作品: MediatR (在微软的官方示例EShop中也使用了MediatR)。同时,“JIMMY BOGARD” 也是提出“将领域事件附加在聚合根”上的人,为领域驱动设计(DDD)做出了很大的贡献。在微软官方文档中,您可以看到该处提及到了“JIMMY BOGARD”: 好吧,优秀的人总是优秀😭。还是回到今天的正文,对象映射工具。当然,对于AutoMapper大家可能再熟悉不过了

What does AutoMapper MapAtRuntime() do?

拜拜、爱过 提交于 2020-04-14 09:13:08
问题 I have seen MapAtRuntime() function in AutoMapper, and this is the explanation that I get from intellisense: Do not precompute the execution plan for this member, just map it at runtime. Simplifies the execution plan by not inlining. But what does it actually do? And how/when should I use it? // I don't know if this is the correct usage, and what difference does it make CreateMap<MyEntity, MyViewModel>() .ForMember(dest => dest.MyField, opt => opt.MapAtRuntime()); I have not been able to find

Automapper AddAfterMapAction not calling method

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-25 17:34:08
问题 I am using global configuration for Automapper profile mapping. public class StudentProfile : Profile { public StudentProfile() { CreateMap<Student, StudentVM>() .ForMember(dest => dest.school, src => src.Ignore()); } } Mapper Configuration public static class Configuration { public static IMapper InitializeAutoMapper() { MapperConfiguration config = new MapperConfiguration(cfg => { cfg.AddProfile(new StudentProfile()); }); config.AssertConfigurationIsValid(); return config.CreateMapper(); }

17.AutoMapper 之配置(Configuration)

人走茶凉 提交于 2020-03-21 17:01:17
https://www.jianshu.com/p/031ff68797dd 配置(Configuration) 通过构造函数创建并初始化 MapperConfiguration 实例: config = new MapperConfiguration(cfg => { cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<FooProfile>(); }); MapperConfiguration 可以静态存储在静态字段或者依赖注入容器中。一经创建就无法更改/修改。 或者,您可以使用静态Mapper实例初始化AutoMapper: Mapper.Initialize(cfg => { cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<FooProfile>(); }); 配置文件实例 使用配置文件来组织你的映射配置是一个很好的方式。创建继承自Profile的类并把配置写在构造函数中: // 这种方式从5.0版本开始 public class OrganizationProfile : Profile { public OrganizationProfile() { CreateMap<Foo, FooDto>(); // 在这里使用 CreateMap... 等等 (Profile 方法跟

ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net

倖福魔咒の 提交于 2020-03-21 08:27:38
在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作。要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利。 系统结构 整个系统工程结构如上,基于传统的三层架构模式(不太懂的快去恶补一下) Web: 基于MVC工程模板搭建,系统模型,视图,控制器 Service: 业务 Repository: 持久化层,集成EntityFramework Tracking:日志组件集成Log4net CommonUtils:公共工具,提供加密解密/序列化/Excel处理,提供Castle Ioc管理 话不多说,直接上干货 集成Log4net 虽说李老板的芒果业务系统是如此的简单,可一向有着强迫症的小墨仍然有板有眼的规划系统的各个架构功能,做事尽善尽美是小墨的一贯作风。日志能省吗,当然不能!以下集成Log4net.   Nuget下载   这里直接右键解决方案Nuget中搜索Log4net,安装最新版5.2.7 日志配置文件   <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net

Automapper: map properties manually

血红的双手。 提交于 2020-03-17 08:30:52
问题 I just started to use automapper to map DTOs<->Entities and it seems to be working great. In some special cases I want to map only some properties and perform additional checks. Without automapper the code looks like this (using fasterflect's PropertyExtensions): object target; object source; string[] changedPropertyNames = { }; foreach (var changedPropertyName in changedPropertyNames) { var newValue = source.GetPropertyValue(changedPropertyName); target.SetPropertyValue(changedPropertyName,