dapper 自訂資料庫欄位和代碼中Model欄位不一致時候的mapping方法

來源:互聯網
上載者:User

標籤:style   blog   color   io   ar   for   sp   資料   div   

namespace YourNamespace{    /// <summary>    /// Uses the Name value of the ColumnAttribute specified, otherwise maps as usual.    /// </summary>    /// <typeparam name="T">The type of the object that this mapper applies to.</typeparam>    public class ColumnAttributeTypeMapper<T> : FallbackTypeMapper    {        public ColumnAttributeTypeMapper()            : base(new SqlMapper.ITypeMap[]                {                    new CustomPropertyTypeMap(                       typeof(T),                       (type, columnName) =>                           type.GetProperties().FirstOrDefault(prop =>                               prop.GetCustomAttributes(false)                                   .OfType<ColumnMappingAttribute>()                                   .Any(attr => attr.Name == columnName)                               )                       ),                    new DefaultTypeMap(typeof(T))                })        {        }    }      [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]    public class ColumnMappingAttribute : Attribute    {        public string Name { get; set; }    }   public class FallbackTypeMapper : SqlMapper.ITypeMap    {        private readonly IEnumerable<SqlMapper.ITypeMap> _mappers;         public FallbackTypeMapper(IEnumerable<SqlMapper.ITypeMap> mappers)        {            _mappers = mappers;        }          public ConstructorInfo FindConstructor(string[] names, Type[] types)        {            foreach (var mapper in _mappers)            {                try                {                    ConstructorInfo result = mapper.FindConstructor(names, types);                    if (result != null)                    {                        return result;                    }                }                catch (NotImplementedException)                {                }            }            return null;        }         public SqlMapper.IMemberMap GetConstructorParameter(ConstructorInfo constructor, string columnName)        {            foreach (var mapper in _mappers)            {                try                {                    var result = mapper.GetConstructorParameter(constructor, columnName);                    if (result != null)                    {                        return result;                    }                }                catch (NotImplementedException)                {                }            }            return null;        }         public SqlMapper.IMemberMap GetMember(string columnName)        {            foreach (var mapper in _mappers)            {                try                {                    var result = mapper.GetMember(columnName);                    if (result != null)                    {                        return result;                    }                }                catch (NotImplementedException)                {                }            }            return null;        }    }  }
public static IEnumerable LoadWithCustomMapping(){    using (var conn = OpenDBConnection())    {        Dapper.SqlMapper.SetTypeMap(typeof(MyArea), new ColumnAttributeTypeMapper());        return conn.Query("SELECT TOP 10 CAID,CAName,En FROM CityArea");    }}

 

dapper 自訂資料庫欄位和代碼中Model欄位不一致時候的mapping方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.