Проблема заключалась в названии свойств.
Я решил это с помощью Custom Column Mapping, чтобы сделать это, у меня есть два возможных решения:
Без расширений
Сначала мы определяем словарь с именем столбца в качестве ключа и именем свойства в качестве значения
IDictionary<string, string> columnMaps = new Dictionary<string, string>()
{
{ "Macro_tarea.ID", "ID" },
{ "Registros.ID", "ID" }
};
Затем мы определяем делегата для получения объекта PropertyInfo свойства, которому мы намереваемся присвоить псевдоним предыдущего словаря
var mapper = new Func<Type, string, PropertyInfo>((type, columnName) =>
{
if (columnMaps.ContainsKey(columnName))
return type.GetProperty(columnMaps[columnName]);
else
return type.GetProperty(columnName);
});
Теперь мы определяем объект, который реализует интерфейс ITypeMap
, используя CustomPropertyTypeMap
реализацию
ITypeMap MacroTareaMapper = new CustomPropertyTypeMap(typeof(Macro_tarea),
(type, columnName) => mapper(type, columnName));
ITypeMap RegistrosMapper = new CustomPropertyTypeMap(typeof(Registros),
(type, columnName) => mapper(type, columnName));
Тогда мы их регистрируем
SqlMapper.SetTypeMap(typeof(Macro_tarea), MacroTareaMapper);
SqlMapper.SetTypeMap(typeof(Registros), RegistrosMapper);
Более простое решение с Dapper.FluentMap
Это реализовано следующим образом:
Мы создаем класс, который наследуется от EntityMap<T>
и, используя метод Map, определяем, какой столбец соответствует каждому свойству. Например,
internal class Macro_tareaMap : EntityMap<Macro_tarea>
{
internal Macro_tareaMap()
{
//Mi propiedad ID esta asociada a la columna Macro_tarea.ID
Map(x => x.ID).ToColumn("Macro_tarea.ID");
}
}
Тогда просто зарегистрируйте его
FluentMapper.Initialize((config) =>
{
config.AddMap(new Macro_tareaMap());
});
Надеюсь, это поможет другим людям!
Источник: https://medium.com/dapper-net/custom-columns-mapping-1cd45dfd51d6