Cómo asignar la colección de propiedades de navegación con automóvil y di -- # campo con dependency-injection campo con asp.net-core-mvc campo con automapper campo con navigation-properties camp Relacionados El problema

How to map navigation property collection with Automapper and DI


0
vote

problema

Español

Estoy usando el automóvil en el núcleo de MVC para mapear entre mis entidades y DTOS y la inyectaré a través del siguiente código.

   var mappingConfig = new MapperConfiguration(mc =>         {             mc.CreateMissingTypeMaps = true;             mc.AddProfile(new MappingProfile());         });          IMapper mapper = mappingConfig.CreateMapper();         services.AddSingleton(mapper);   

Tengo una relación así.

  public class ProgramDTO {     public Guid Id { get; set; }     public string Name { get; set; }     public List<AnalystDTO> Analysts { get; set; } }  public class AnalystDTO {     public Guid ID { get; set; }     public string Email { get; set; } }  public class ProgramEntity {     public Guid Id { get; set; }     public string Name { get; set; }     public ICollection<AnalystEntity> AnalystEntitys { get; set; } }  public class AnalystEntity {     public Guid ID { get; set; }     public string Email { get; set; }     public int ProgramEntityId { get; set; }     public ProgramEntity ProgramEntity { get; set; } }   

Estoy tratando de mapear entre programas y programas para rellenar la lista de analistas, pero parece que no puede encontrar un ejemplo concreto. Mi perfil de mapeo se ve actualmente así.

    // Program Analyst   CreateMap<AnalystDTO, AnalystEntity>();    CreateMap<AnalystEntity, AnalystDTO>();    // Program   CreateMap<ProgramDTO, ProgramEntity>();                CreateMap<ProgramEntity, ProgramDTO>()             .ForMember(dest => dest.Analysts, opt => opt.MapFrom(s => Mapper.Map<IEnumerable<AnalystEntity>, IEnumerable<AnalystDTO>>(s.AnalystEntitys)));   

Este mapeo parece ser lógicamente correcto, sin embargo, al ejecutar el código que recibo el error "Mapper no inicializado" que estoy asumiendo es porque estoy usando DI.

¿Es este el enfoque correcto para mapear las propiedades de navegación en su propio DTO y, de ser así, cómo obtengo una referencia a Mapper en el perfil de mapeo? Si no, ¿puede alguien apuntarme en la dirección correcta? ¡Gracias por adelantado!

Original en ingles

I am using Automapper in MVC Core to map between my entities and DTOs and am injecting it via the following code.

 var mappingConfig = new MapperConfiguration(mc =>         {             mc.CreateMissingTypeMaps = true;             mc.AddProfile(new MappingProfile());         });          IMapper mapper = mappingConfig.CreateMapper();         services.AddSingleton(mapper); 

I have a relationship like so.

public class ProgramDTO {     public Guid Id { get; set; }     public string Name { get; set; }     public List<AnalystDTO> Analysts { get; set; } }  public class AnalystDTO {     public Guid ID { get; set; }     public string Email { get; set; } }  public class ProgramEntity {     public Guid Id { get; set; }     public string Name { get; set; }     public ICollection<AnalystEntity> AnalystEntitys { get; set; } }  public class AnalystEntity {     public Guid ID { get; set; }     public string Email { get; set; }     public int ProgramEntityId { get; set; }     public ProgramEntity ProgramEntity { get; set; } } 

I am trying to map between ProgramDTO and ProgramEntity to populate the list of analysts but cannot seem to find a concrete example. My mapping profile currently looks like this.

  // Program Analyst   CreateMap<AnalystDTO, AnalystEntity>();    CreateMap<AnalystEntity, AnalystDTO>();    // Program   CreateMap<ProgramDTO, ProgramEntity>();                CreateMap<ProgramEntity, ProgramDTO>()             .ForMember(dest => dest.Analysts, opt => opt.MapFrom(s => Mapper.Map<IEnumerable<AnalystEntity>, IEnumerable<AnalystDTO>>(s.AnalystEntitys))); 

This mapping seems to be logically correct, however, upon running the code i receive the error "Mapper not initialized" which I am assuming is because I am using DI.

Is this the correct approach for mapping navigation properties to their own DTOs and, if so, how do I get a reference to Mapper in the mapping profile? If not, can somebody point me in the right direction? Thanks in advance!

              

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Cuando utilice AUTO MAPPER en el núcleo, puede aprovechar el siguiente paquete para registrar imapper con la colección de servicios:

  var textString2  

y luego solo usarlo como:

  var textString3  

y esto olfateará a través de los ensamblajes y cargará su perfil (cualquier clase que implemente la clase de perfil) y agreguela a los registros de tipo

 

When using Auto Mapper in Core you could leverage the following package to register IMapper with the service collection:

AutoMapper.Extensions.Microsoft.DependencyInjection 

And then just use it like:

services.AddAutoMapper() 

And this will sniff through the assemblies and load your profile (any class that implements Profile class) and add it to type registrations

 
 

Relacionados problema

1  Marco de entidad .net Cómo agregar la propiedad de navegación  ( Net entity framework how to add navigation property ) 
He creado un modelo de base de datos con marco de entidades que se han relacionado con muchos a muchos entre destinatarios y listas de correo. Cuando generé l...

0  Breeze ** Ampliar ** vs. entityFramework ** Incluya ** para la carga ansiosa de las propiedades de navegación  ( Breeze expand vs entityframework include for eager loading of navigatio ) 
a) Para cargar una propiedad de navegación de una entidad con entidades con en entidades en servidor , puedo usar incluyen : NSUserDefaults111 También...

0  Es enteTitreference.load Check for EntyReReference. ¿Se ha descargado?  ( Is entityreference load checking for entityreference isloaded ) 
Hola, me preguntaba si EntityReference.Load MÉTODO INCLUYE If Not ref.IsLoaded Then ref.Load() Mi pregunta es básicamente: Dim person = Context....

2  ¿Es posible que EF Core hagan una propiedad de navegación de un solo sentido?  ( Is it possible in ef core to make a one way navigation property required ) 
Estoy trabajando en un sistema de chat de grupo básico, para el cual creé estas clases: public class Role { public Guid Id { get; set; }; public st...

3  Windows Forms Data Binding and Property Ruta: ¿Cómo manejar la nullabilidad?  ( Windows forms data binding and property path how to handle nullability ) 
Estoy tratando de implementar una maestro / detalle escenario con El MVVM Patrón en un proyecto de Windows Forms (estoy enojado, lo sé). Considere los sig...

0  Propiedades de navegación de carga en NHiberNate 3.2  ( Loading navigation properties in nhibernate 3 2 ) 
Tengo estas entidades: MyDB ->Programmability->StoredProcedures2 Quiero cargar un MyDB ->Programmability->StoredProcedures3 BY está relacionado MyDB ...

3  ASP.NET MVC 4 Navegación Propiedad virtual no poblada en la acción postal  ( Asp net mvc 4 navigation virtual property not populated on post action ) 
Tengo una propiedad de navegación (categoría) en una clase de pregunta para la que estoy creando manualmente una lista desplegable para la creación de la preg...

0  Obtenga el valor de la propiedad de navegación en la entidad que no se ha guardado  ( Get value of navigation property on entity that has not been saved ) 
Digüe que tengo una tabla de clientes y pedidos: n2 Cuando uso el marco de la entidad es muy agradable, cómo crea propiedades de navegación, lo que sign...

5  Marco de entidad y actualización en cascada  ( Entity framework and update cascade ) 
un poco frustrado aquí. Estoy tratando de encontrar una manera de apoyar la actualización en cascada con el marco de la entidad, y no parece haber una forma i...

1  Cómo limitar la propiedad de navegación anidadada en el controlador MVC ASP.NET  ( How to limit nested navigation property in asp net mvc controller ) 
Recibo un registro de la base de datos con el marco de entidades. Han anidado la propiedad de navegación. public partial class Comment { public Comme...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos