FluentData/Command/Mappers/AutoMapper.cs
(开头部分) 3KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Reflection;
namespace FluentData
{
internal class AutoMapper<T>
{
private readonly DbCommandData _dbCommandData;
internal AutoMapper(DbCommandData dbCommandData)
{
_dbCommandData = dbCommandData;
}
public void AutoMap(object item)
{
var properties = ReflectionHelper.GetProperties(item.GetType());
var fields = DataReaderHelper.GetDataReaderFields(_dbCommandData.Reader);
foreach (var field in fields)
{
if (field.IsSystem)
continue;
var value = _dbCommandData.Reader.GetValue(field.Index);
var wasMapped = false;
PropertyInfo property = null;
if (properties.TryGetValue(field.LowerName, out property))
{
SetPropertyValue(field, property, item, value);
wasMapped = true;
}
else
{
if (field.LowerName.IndexOf('_') != -1)
wasMapped = HandleComplexField(item, field, value);
}
if (!wasMapped && !_dbCommandData.ContextData.IgnoreIfAutoMapFails)
throw new FluentDataException("Could not map: " + field.Name);
}
}
private bool HandleComplexField(object item, DataReaderField field, object value)
{
string propertyName = null;
for (var level = 0; level <= field.NestedLevels; level++)
{
if (string.IsNullOrEmpty(propertyName))
propertyName = field.GetNestedName(level);
else
propertyName += "_" + field.GetNestedName(level);
PropertyInfo property = null;
var properties = ReflectionHelper.GetProperties(item.GetType());
if (properties.TryGetValue(propertyName, out property))
{
后面还有 74 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
