using System.Collections.Generic;
public static class Program
public static void Main()
TestWithItrackingAsSource_NOTWORKING();
TestWitTrackingKeyStaticAsSource_WORKING();
public static void TestWithItrackingAsSource_NOTWORKING()
var config = new AutoMapper.MapperConfiguration(cfg => {
cfg.CreateMap<ITrackingKey, MyEntitiesDbFirstModel>()
.ForMember(d => d.TrackingKey, o => o.MapFrom(s => s.NewTrackingKey));
cfg.CreateMap<IBatchProcessing, MyEntitiesDbFirstModel>()
.ForMember(d => d.Skip, o => o.MapFrom(s => s.Skip))
.ForMember(d => d.Take, o => o.MapFrom(s => s.Take))
.ForMember(d => d.Total, o => o.MapFrom(s => s.Total));
var mapper = config.CreateMapper();
var source = new TrackingKeyStatic<NotReleventClassForThisExample>()
var actual = mapper.Map<MyEntitiesDbFirstModel>(source);
Console.WriteLine("TestWithItrackingAsSource()");
Console.WriteLine("Skip: " +actual.Skip.Equals(10));
Console.WriteLine("Take: " +actual.Take.Equals(50));
Console.WriteLine("Total: " +actual.Total.Equals(123456));
Console.WriteLine("TrackingKey: " +actual.TrackingKey.Equals(987654) + " / why this happend?");
Console.WriteLine("======");
public static void TestWitTrackingKeyStaticAsSource_WORKING()
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<TrackingKeyStatic<NotReleventClassForThisExample>, MyEntitiesDbFirstModel>()
.ForMember(d => d.TrackingKey, o => o.MapFrom(s => s.NewTrackingKey));
cfg.CreateMap<IBatchProcessing, MyEntitiesDbFirstModel>()
.ForMember(d => d.Skip, o => o.MapFrom(s => s.Skip))
.ForMember(d => d.Take, o => o.MapFrom(s => s.Take))
.ForMember(d => d.Total, o => o.MapFrom(s => s.Total));
var mapper = config.CreateMapper();
var source = new TrackingKeyStatic<NotReleventClassForThisExample>()
var actual = mapper.Map<MyEntitiesDbFirstModel>(source);
Console.WriteLine("TestWitTrackingKeyStaticAsSource");
Console.WriteLine("Skip: " +actual.Skip.Equals(10));
Console.WriteLine("Take: " +actual.Take.Equals(50));
Console.WriteLine("Total: " +actual.Total.Equals(123456));
Console.WriteLine("TrackingKey: " +actual.TrackingKey.Equals(987654));
public interface ITrackingKey
int NewTrackingKey { get; set; }
List<object> Records { get; set; }
public interface IBatchProcessing
public class TrackingKey<T> : ITrackingKey
private List<object> _records;
public int NewTrackingKey { get; set; }
List<object> ITrackingKey.Records
set { _records = value; }
public class TrackingKeyStatic<T> : TrackingKey<T>, IBatchProcessing
public int Skip { get; set; }
public int Take { get; set; }
public int Total { get; set; }
public class MyEntitiesDbFirstModel
public int Skip { get; set; }
public int Take { get; set; }
public int Total { get; set; }
public int TrackingKey { get; set; }
public class NotReleventClassForThisExample { public int MyProperty { get; set; }}