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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。