Quantcast
Channel: ASP.NET Core
Viewing all articles
Browse latest Browse all 9386

AutoMapper not populatign destination properties

$
0
0

In an ASP.NET Core 1.1 Web API, I am trying to map an entity model to a DTO using AutoMapper.

The entity model:

namespace InspectionsData.Models
{
	[Table("property")]
	public class Property
	{
		[Key]
		[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
		[Column("property_id")]
		public int? Id { get; set; }

		[Column("show_inventory")]
		public bool ShowInventory { get; set; }

		[Column("latitude")]
		public double? Latitude { get; set; }

		[Column("longitude")]
		public double? Longitude { get; set; }

		[Column("property_type_id")]
		public int? PropertyTypeId { get; set; }
		[ForeignKey("PropertyTypeId")]
		[Display(Name = "Property Type")]
		public PropertyType PropertyType { get; set; }

		[Column("inspection_frequency_id")]
		public int? InspectionFrequencyId { get; set; }
		[ForeignKey("InspectionFrequencyId")]
		[Display(Name = "Inspection Frequency")]
		public InspectionFrequency InspectionFrequency { get; set; }

		[Column("group_id")]
		public int? GroupId { get; set; }
		[ForeignKey("GroupId")]
		[Display(Name = "Group")]
		public Group Group { get; set; }

		[Column("added_by_id")]
		public int? AddedById { get; set; }
		[ForeignKey("AddedById")]
		[Display(Name = "Added By")]
		public virtual User AddedBy { get; set; }

		[Column("added_date")]
		[Display(Name = "Added Date")]
		public DateTime AddedDate { get; set; }

		[Column("deleted_by_id")]
		public int? DeletedById { get; set; }
		[ForeignKey("DeletedById")]
		[Display(Name = "Deleted By")]
		public virtual User DeletedBy { get; set; }

		[Column("deleted_date")]
		[Display(Name = "Deleted Date")]
		public DateTime? DeletedDate { get; set; }
	}
}



and the DTO:

namespace InspectionsData.DTOs
{
	public class PropertyDto
	{
		public int? Id { get; set; }
		public bool ShowInventory { get; set; }
		public double? Latitude { get; set; }
		public double? Longitude { get; set; }
		public PropertyType PropertyType { get; set; }
		public InspectionFrequency InspectionFrequency { get; set; }
		public DateTime NextInspectionDate { get; set; }
	}
}



The mapping is done in a configuration file:

public class AutoMapperProfileConfiguration : Profile
{
	public AutoMapperProfileConfiguration()
	{
		// Add as many of these lines as you need to map your objects
		var map = CreateMap<Property, PropertyDto>();
		map.ForAllMembers(opt => opt.Ignore());
		map.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id));
		map.ForMember(dest => dest.ShowInventory, opt => opt.MapFrom(src => src.ShowInventory));
		map.ForMember(dest => dest.Latitude, opt => opt.MapFrom(src => src.Latitude));
		map.ForMember(dest => dest.Longitude, opt => opt.MapFrom(src => src.Longitude));
		map.ForMember(dest => dest.PropertyType, opt => opt.MapFrom(src => src.PropertyType));
		map.ForMember(dest => dest.InspectionFrequency, opt => opt.MapFrom(src => src.InspectionFrequency));
	}
}



And the setting up of AutoMapper i Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
	var config = new AutoMapper.MapperConfiguration(cfg =>
	{
		cfg.AddProfile(new AutoMapperProfileConfiguration());
	});

	var mapper = config.CreateMapper();
	services.AddSingleton(mapper);
}

In my controller action, I execute the mapping:

[HttpGet]
public async Task<IActionResult> GetProperty()
{
	var properties = _context.Property
	.Include(t => t.PropertyType)
	.Include(f => f.InspectionFrequency)
	.Where(a => a.DeletedDate == null && a.GroupId == 1);


	var propertiesDto = _mapper.Map<IEnumerable<PropertyDto>>(properties);

	return Ok(propertiesDto);
}



It doesn't give an error, but all the properties in all the objects in the propertiesDto list are default values (NULL for objects and nullable types, FALSE for booleans, 0 for integers, etc.) Any ideas where I'm going wrong?


Viewing all articles
Browse latest Browse all 9386

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>