dapper 自定义数据库字段和代码中Model字段不一致时候的mapping方法 - 不能失败 - 博客园
Excerpt
namespace YourNamespace{ /// /// Uses the Name value of the ColumnAttribute specified, otherwise maps as usual. /// /// The type of the …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| <span>namespace</span><span> YourNamespace { </span><span>///</span> <span><summary></span> <span>///</span><span> Uses the Name value of the ColumnAttribute specified, otherwise maps as usual. </span><span>///</span> <span></summary></span> <span>///</span> <span><typeparam name="T"></span><span>The type of the object that this mapper applies to.</span><span></typeparam></span> <span>public</span> <span>class</span> ColumnAttributeTypeMapper<T><span> : FallbackTypeMapper { </span><span>public</span><span> ColumnAttributeTypeMapper() : </span><span>base</span>(<span>new</span><span> SqlMapper.ITypeMap[] { </span><span>new</span><span> CustomPropertyTypeMap( </span><span>typeof</span><span>(T), (type, columnName) </span>=><span> type.GetProperties().FirstOrDefault(prop </span>=><span> prop.GetCustomAttributes(</span><span>false</span><span>) .OfType</span><ColumnMappingAttribute><span>() .Any(attr </span>=> attr.Name ==<span> columnName) ) ), </span><span>new</span> DefaultTypeMap(<span>typeof</span><span>(T)) }) { } } [AttributeUsage(AttributeTargets.Property, AllowMultiple </span>= <span>true</span><span>)] </span><span>public</span> <span>class</span><span> ColumnMappingAttribute : Attribute { </span><span>public</span> <span>string</span> Name { <span>get</span>; <span>set</span><span>; } } </span><span>public</span> <span>class</span><span> FallbackTypeMapper : SqlMapper.ITypeMap { </span><span>private</span> <span>readonly</span> IEnumerable<SqlMapper.ITypeMap><span> _mappers; </span><span>public</span> FallbackTypeMapper(IEnumerable<SqlMapper.ITypeMap><span> mappers) { _mappers </span>=<span> mappers; } </span><span>public</span> ConstructorInfo FindConstructor(<span>string</span><span>[] names, Type[] types) { </span><span>foreach</span> (<span>var</span> mapper <span>in</span><span> _mappers) { </span><span>try</span><span> { ConstructorInfo result </span>=<span> mapper.FindConstructor(names, types); </span><span>if</span> (result != <span>null</span><span>) { </span><span>return</span><span> result; } } </span><span>catch</span><span> (NotImplementedException) { } } </span><span>return</span> <span>null</span><span>; } </span><span>public</span> SqlMapper.IMemberMap GetConstructorParameter(ConstructorInfo constructor, <span>string</span><span> columnName) { </span><span>foreach</span> (<span>var</span> mapper <span>in</span><span> _mappers) { </span><span>try</span><span> { </span><span>var</span> result =<span> mapper.GetConstructorParameter(constructor, columnName); </span><span>if</span> (result != <span>null</span><span>) { </span><span>return</span><span> result; } } </span><span>catch</span><span> (NotImplementedException) { } } </span><span>return</span> <span>null</span><span>; } </span><span>public</span> SqlMapper.IMemberMap GetMember(<span>string</span><span> columnName) { </span><span>foreach</span> (<span>var</span> mapper <span>in</span><span> _mappers) { </span><span>try</span><span> { </span><span>var</span> result =<span> mapper.GetMember(columnName); </span><span>if</span> (result != <span>null</span><span>) { </span><span>return</span><span> result; } } </span><span>catch</span><span> (NotImplementedException) { } } </span><span>return</span> <span>null</span><span>; } } }</span>
|
1 2 3 4 5 6 7 8
| <span>public</span> <span>static</span><span> IEnumerable LoadWithCustomMapping() { </span><span>using</span> (<span>var</span> conn =<span> OpenDBConnection()) { Dapper.SqlMapper.SetTypeMap(</span><span>typeof</span>(MyArea), <span>new</span><span> ColumnAttributeTypeMapper()); </span><span>return</span> conn.Query(<span>"</span><span>SELECT TOP 10 CAID,CAName,En FROM CityArea</span><span>"</span><span>); } }</span>
|
posted @ 2014-10-20 23:14 不能失败 阅读(7222) 评论() 编辑 收藏 举报