Как сделать так, чтобы Dapper.NET отображал несопоставленные столбцы в словарь? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть таблицы, которые будут иметь некоторые известные, некоторые неизвестные столбцы, позволяя некоторый динамический SQL для выбора.Я ищу какие-либо столбцы, которые не имеют соответствующего свойства для добавления в словарь.Основываясь на другом вопросе Как я могу заставить Dapper.NET генерировать, когда в наборе результатов есть несопоставленные столбцы? , но вместо того, чтобы выдавать ошибку, я хотел бы просто сопоставить эти столбцы со словарем, который будет наclass.

public SqlMapper.IMemberMap GetMember( string columnName ) {
            var fallbackMappers = new List<SqlMapper.ITypeMap>();
            fallbackMappers.Add( _defaultTypeMap );

            var fallbackTypeMapper = new FallbackTypeMapper(fallbackMappers);

            var member = fallbackTypeMapper.GetMember(columnName);
            if(member == null ) {
                throw new Exception();
            }
            return member;
        }
//...
public static async Task<IEnumerable<T>> QueryAsyncOtherProps<T>(
            this IDbConnection cnn,
            string sql,
            object param = null,
            IDbTransaction transaction = null,
            int? commandTimeout = default,
            CommandType? commandType = default
        )
            where T : BaseSimpleType {
            lock ( _lock ) {
                if ( TypesThatHaveMapper.ContainsKey( typeof( T ) ) == false ) {
                    SqlMapper.SetTypeMap( typeof( T ), new NullTypeMapToOtherProperties<T>() );
                    TypesThatHaveMapper.Add( typeof( T ), null );
                }
            }
            return await cnn.QueryAsync<T>( sql, param, transaction, commandTimeout, commandType );
        }

My BaseSimpleType просто содержит свойство словаря с именем OtherProperties, так что это будет вызываться только для типов, имеющих это поле, и имя является согласованным.Есть ли другой способ попробовать сделать это с Dapper?

...