// Make into nice util function. private void FetchAndFillObject(SqlCommand command, ORMEntity entity) { using var reader = command.ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.VisibleFieldCount; i++) { if (i == entity.TableScheme.Count) // 6? check if 6 for user and if this is a good generic option? // what if certain fields are not available? does it break? { break; } var propertyName = reader.GetName(i); var propertyValue = reader.GetValue(i); if (entity[propertyName].GetType().IsAssignableFrom(typeof(ORMEntity))) { entity[propertyName] = Activator.CreateInstance(entity[propertyName].GetType()); (entity[propertyName] as ORMEntity)[reader.GetName(6)] = reader.GetValue(6); (entity[propertyName] as ORMEntity)[reader.GetName(7)] = reader.GetValue(7); } else { entity[propertyName] = propertyValue; } } } }
public static (object value, string sourceColumn) SqlValue(this ORMEntity entity, string columnName) { object value; switch (entity.GetPropertyInfo(columnName).PropertyType) { case Type dateTime when dateTime == typeof(DateTime?): if (((DateTime?)entity[columnName]).HasValue) { value = ((DateTime?)entity[columnName]).Value.ToSqlString(); } else { return(DBNull.Value, columnName); } break; case Type dateTime when dateTime == typeof(DateTime): value = ((DateTime)entity[columnName]).ToSqlString(); break; default: value = entity[columnName]; break; } if (value == null) { return(DBNull.Value, columnName); } else { return(value, columnName); } }
public static bool IsForeignKeyOfType(this ORMEntity entity, string propertyName, Type type) { var propertyInfo = entity.GetPropertyInfo(propertyName); var fkAttribute = propertyInfo.GetCustomAttributes(typeof(ORMForeignKeyAttribute), false).FirstOrDefault() as ORMForeignKeyAttribute; return(type == fkAttribute.Relation); }
public static PropertyInfo GetPropertyInfo(this ORMEntity entity, string propertyName) { return(entity.GetType().GetProperty(propertyName, entity.PublicIgnoreCaseFlags) ?? entity.GetType().GetProperties().FirstOrDefault(x => (x.GetCustomAttributes(typeof(ORMColumnAttribute), false).FirstOrDefault() as ORMColumnAttribute)?.ColumnName == propertyName)); }