Сопоставление столбцов 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, та же ошибка.

0 ответов

Другие вопросы по тегам