我目前面临涉及automapper的问题。 我试图绘制完全无关的类型,除了投影类的属性外,它们完美地工作。我目前无法将它们映射到派生类型。 (信息/数据在源类型中都是可用的,所以它不是关于EF和继承......那部分已经解决了。)
来源/目的地类型
#region DestinationTypes
private class A
{
public List<B> Bs { get; set; }
}
private class B
{
public string Id { get; set; }
}
private class C : B
{
public string TestC { get; set; }
}
#endregion DestinationTypes
#region SourceTypes
private class D
{
public List<E> Bs { get; set; }
}
private class E
{
public string Id { get; set; }
public string TestC { get; set; }
}
#endregion SourceTypes
映射配置
var _cfg =new MapperConfigurationExpression();
_cfg.CreateMap<E, C>();
_cfg.CreateMap<D, A>();
var _config = new MapperConfiguration(_cfg);
版本:6.2.2 预期的行为 我期望一个可疑的地方,其中List Bs充满了类型为C的实例。
实际行为 列表B填充了类型B的实例,而不是类型C。
重现的步骤:
[TestMethod]
public void TestProjection()
{
int _total = 10;
var _listOfD = new List<D>();
for (int _i = 0; _i < 10; _i++)
{
var _d = new D();
_d.Bs = new List<E>();
for (int _j = 0; _j < _total; _j++)
{
var _e = new E();
_e.Id = $"{_i}_{_j}";
_e.TestC = $"C{_i}_{_j}";
_d.Bs.Add(_e);
}
_listOfD.Add(_d);
}
var _cfg =new MapperConfigurationExpression();
_cfg.CreateMap<E, C>();
_cfg.CreateMap<D, A>();
var _config = new MapperConfiguration(_cfg);
//_config.ResolveTypeMap(typeof(E), typeof(C));
//_config.CompileMappings();
var _x = _listOfD.AsQueryable().ProjectTo<A>(_config);
foreach (var _z in _x)
{
var _item = (C)_z.Bs.FirstOrDefault();
Debug.Assert(_item.TestC != null && _item.Id != null);
}
}