Сопоставление столбцов Dapper
Впервые использую Dapper.
У меня есть четко определенная база данных с именами столбцов в нижнем регистре, например
id
,
title
,
name
. Подсказка Visual Studio по свойствам
These words must begin with upper case characters
так что я действительно не хочу нарушать это соглашение.
Я попытался сопоставить свойства столбцам, поскольку
EntityFramwork
позволяет. Я нашел статью , как это и пост , как это .
Что касается первого, я разделил код, чтобы иметь возможность его отлаживать, и параметризовал его с помощью дженериков, но
propetySelector
никогда не вызывается:
protected BaseDB(IOptions<DatabaseOptions> databaseOptions)
{
_options = databaseOptions.Value;
Func<Type, string, PropertyInfo> propertySelector = (type, columnName) =>
{
return type.GetProperties().FirstOrDefault(prop => GetDescriptionFromAttribute(prop) == columnName);
};
var map = new CustomPropertyTypeMap(typeof(T), propertySelector);
SqlMapper.SetTypeMap(typeof(T), map);
}
static string GetDescriptionFromAttribute(MemberInfo member)
{
if (member == null) return null;
var attrib = (DescriptionAttribute)Attribute.GetCustomAttribute(member, typeof(DescriptionAttribute), false);
return attrib?.Description;
}
Что касается последнего, методы вызываются, но я все равно получаю ошибку
Column Email of relation users does not exist
.
internal class UserMap : EntityMap<User>
{
internal UserMap() {
Map(x => x.Email).ToColumn("email");
}
}
public class UsersDB : BaseDB<User>, IUserService
{
static UsersDB(){
FluentMapper.Initialize((config) =>
{
config.AddMap(new UserMap());
});
}
public UsersDB(IOptions<DatabaseOptions> databaseOptions) : base(databaseOptions)
{
}
}
Также попытался добавить ColumnAttributeTypeMapper, та же ошибка.