Dapper. Map to SQL Column with spaces in column names

后端 未结 3 1274
灰色年华
灰色年华 2020-12-30 01:46

I\'ve managed to get something up and running today as small sandbox/POC project, but have seemed to bump my head on one issue...

Question:

3条回答
  •  温柔的废话
    2020-12-30 02:20

    One option here would be to go via the dynamic / non-generic API, and then fetch the values out via the IDictionary API per row, but that might be a bit tedious.

    As an alternative, you can create a custom mapper, and tell dapper about it; for example:

    SqlMapper.SetTypeMap(typeof(ClassA), new RemoveSpacesMap());
    

    with:

    class RemoveSpacesMap : Dapper.SqlMapper.ITypeMap
    {
    
        System.Reflection.ConstructorInfo SqlMapper.ITypeMap.FindConstructor(string[] names, Type[] types)
        {
            return null;
        }
    
        SqlMapper.IMemberMap SqlMapper.ITypeMap.GetConstructorParameter(System.Reflection.ConstructorInfo constructor, string columnName)
        {
            return null;
        }
    
        SqlMapper.IMemberMap SqlMapper.ITypeMap.GetMember(string columnName)
        {
            var prop = typeof(ClassA).GetProperty(columnName.Replace(" ", ""));
            return prop == null ? null : new PropertyMemberMap(columnName, prop);
        }
        class PropertyMemberMap : Dapper.SqlMapper.IMemberMap
        {
            private string columnName;
            private PropertyInfo property;
            public PropertyMemberMap(string columnName, PropertyInfo property)
            {
                this.columnName = columnName;
                this.property = property;
            }
            string SqlMapper.IMemberMap.ColumnName
            {
                get { throw new NotImplementedException(); }
            }
    
            System.Reflection.FieldInfo SqlMapper.IMemberMap.Field
            {
                get { return null; }
            }
    
            Type SqlMapper.IMemberMap.MemberType
            {
                get { return property.PropertyType; }
            }
    
            System.Reflection.ParameterInfo SqlMapper.IMemberMap.Parameter
            {
                get { return null; }
            }
    
            System.Reflection.PropertyInfo SqlMapper.IMemberMap.Property
            {
                get { return property; }
            }
        }
    }
    

提交回复
热议问题