public static IModelToTableMapper <T> GetModelMapperFromColumnDataAnnotation() { var modelPropertyInfosWithColumnAttribute = typeof(T) .GetProperties(BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public) .Where(x => CustomAttributeExtensions.IsDefined((MemberInfo)x, typeof(ColumnAttribute), false)) .ToArray(); if (!modelPropertyInfosWithColumnAttribute.Any()) { return(null); } var mapper = new ModelToTableMapper <T>(); foreach (var propertyInfo in modelPropertyInfosWithColumnAttribute) { var attribute = propertyInfo.GetCustomAttribute(typeof(ColumnAttribute)); var dbColumnName = ((ColumnAttribute)attribute)?.Name; if (dbColumnName != null && mapper.GetMapping(dbColumnName) != null) { throw new ModelToTableMapperException("Duplicate mapping for column " + dbColumnName); } mapper.AddMapping(propertyInfo, dbColumnName); } return(mapper); }
internal virtual T MaterializeEntity(List <Message> messages, ModelToTableMapper <T> mapper) { var entity = (T)Activator.CreateInstance(typeof(T)); foreach (var entityPropertyInfo in this.EntiyProperiesInfo) { var propertyMappedTo = mapper?.GetMapping(entityPropertyInfo); var columnName = propertyMappedTo ?? entityPropertyInfo.Name; var message = messages.FirstOrDefault(m => string.Equals(m.Recipient, columnName, StringComparison.CurrentCultureIgnoreCase)); if (message == default(Message)) { continue; } var dbColumnInfo = this.GetColumnInfo(columnName); var value = GetValue(entityPropertyInfo, dbColumnInfo, message.Body); entityPropertyInfo.SetValue(entity, value); } return(entity); }