В моей базе данных у меня есть базовая таблица с 2 таблицами подробностей, каждая запись в базовой таблице будет иметь только одну запись подробностей.Я пытаюсь сопоставить эти 3 таблицы двум моделям домена, которые наследуются от модели общего базового домена.Обычно это называется наследованием таблиц на типы в EntityFramework, но в EntityFrameworkCore оно не реализовано.
Мои модели dto выглядят как
public class SourceBase
{
public int Id {get;set;}
public string Value {get;set;}
public SourceA A {get;set;}
public SourceB B {get;set;}
}
public class SourceA
{
public string ValueA {get;set;}
}
public class SourceB
{
public string ValueB {get;set;}
}
Мои модели желаемых доменов выглядят как
public class TargetBase
{
public int Id {get;set;}
public string Value {get;set;}
}
public class TargetA : TargetBase
{
public string ValueA {get;set;}
}
public class TargetB : TargetBase
{
public string ValueB {get;set;}
}
Как мне настроить сопоставления для этого?
Моя самая успешная попытка была:
CreateMap<SourceBase, TargetBase>().ConvertUsing<CustomTypeConverter>();
CreateMap<SourceA, TargetA>();
CreateMap<SourceB, TargetB>();
с CustomTypeConverter:
public class CustomTypeConverter : ITypeConverter<SourceBase, TargetBase>
{
public TargetBase Convert(SourceBase source, TargetBase destination, ResolutionContext context)
{
if (source.A == null)
{
return context.Mapper.Map<SourceB, TargetB>(source.B);
}
else if (source.B == null)
{
return context.Mapper.Map<SourceA, TargetA>(source.A);
}
return null;
}
}
, которая правильно дает мне тип TargetA или TargetB, но ни одно из значений TargetBaseсопоставлены.