zoukankan      html  css  js  c++  java
  • Dapper.FastCRUD与Dapper中的CustomPropertyTypeMap冲突

    在使用Dapper.NET时,由于生成的实体的属性与数据库表字段不同(如表字段叫USER_NAME,生成的对应的实体属性则为UserName)。

    这时需要使用Dapper中的CustomPropertyTypeMap和SqlMapper.SetTypeMap(XX)进行设置。但这样设置后与Dapper.FastCRUD冲突,导致Dapper.FastCRUD无法读取数据。

    原因就是Dapper.FastCRUD在生成SQL语句时,使用了类似USER_NAME AS UserName这样的写法导致。这样就是SqlMapper.SetTypeMap(XX)映射字段不同。

    解决方案:

    找到Dapper.FastCRUD源代码:X:\github\Dapper.FastCRUD\Dapper.FastCRUD\SqlBuilders\StatementSqlBuilder.cs中约161行的函数,添加如下粉红色代码一行,如下:

            [MethodImpl(MethodImplOptions.AggressiveInlining)]
            public string GetColumnName(PropertyMapping propMapping, string tableAlias, bool performColumnAliasNormalization)
            {
                performColumnAliasNormalization = false;//add by SunYJ@20160412
                var sqlTableAlias = tableAlias == null ? string.Empty : $"{this.GetDelimitedIdentifier(tableAlias)}.";
                var sqlColumnAlias = (performColumnAliasNormalization && propMapping.DatabaseColumnName != propMapping.PropertyName)
                                         ? $" AS {this.GetDelimitedIdentifier(propMapping.PropertyName)}"
                                         : string.Empty;
                return $"{sqlTableAlias}{this.GetDelimitedIdentifier(propMapping.DatabaseColumnName)}{sqlColumnAlias}".ToString(CultureInfo.InvariantCulture);
            }

  • 相关阅读:
    IO模型
    协程
    线程
    进程总结
    HashMap和Hashtable有什么区别
    HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的
    GC线程是否为守护线程?
    float f=3.4;是否正确?
    final、finally和finalized的区别?
    Eureka注册中心是什么?
  • 原文地址:https://www.cnblogs.com/sun51586/p/5384053.html
Copyright © 2011-2022 走看看