public virtual TModel BuildFrom(IDbReader reader) { if (!reader.Read()) { return(null); } var model = new TModel(); Properties.ForEach(property => { if (!reader.IsDbNull(property.Name)) { property.SetValue(model, reader[property.Name], null); } }); ManyToOneProperties.ForEach(property => { var propertyName = property.Name + "Id"; if (!reader.IsDbNull(propertyName)) { var manyToOneObject = Activator.CreateInstance(property.PropertyType); var idProperty = property.PropertyType.GetRuntimeProperty("Id"); idProperty.SetValue(manyToOneObject, reader[propertyName], null); property.SetValue(model, manyToOneObject, null); } }); return(model); }