private string CreateUpdateCommand(ManagedObjectBase data, ManagedMetaObject metaObjectDescriptor, TableDescription tableDescription, ColumnDescription keyColumnDescriptor) { var commandText = @String.Empty; data.Verison = ModelContainer.VersionHead; commandText += "UPDATE"; commandText += $" `{tableDescription.Name}`"; commandText += $" SET "; var propertyAssignement = new List <string>(); foreach (var columnDescription in tableDescription.Columns.Where(x => !x.IsKey)) { var value = GetValueString(metaObjectDescriptor, columnDescription, data); propertyAssignement.Add($"`{columnDescription.Name}` = '{value}'"); } commandText += $"{string.Join(", ", propertyAssignement)}"; commandText += " WHERE"; var keyValue = GetValueString(metaObjectDescriptor, keyColumnDescriptor, data); commandText += $" `{keyColumnDescriptor.Name}` = '{keyValue}'"; return(commandText); }
private ManagedObjectBase CreateInstanceOfManagedObject(string guidKey, ManagedMetaObject metaObjectDescriptor, object dataStore) { ManagedObjectBase data = null; var ctor = metaObjectDescriptor.Type.GetConstructor(new Type[] { }); data = ctor.Invoke(new object[] { }) as ManagedObjectBase; InsertDataIntoModelContainer(data, dataStore); return(data); }
private void InjectDetailsintoDataInstance(ManagedObjectBase data, DbDataReader reader, TableDescription tableDescription) { var i = 1; foreach (var column in tableDescription.Columns.OrderBy(x => !x.IsKey).Skip(1)) //Key always needs to be the first variable { object value = null; if (column.IsReference) { value = reader.GetString(i); } else if (column.Type == typeof(string)) { value = reader.GetString(i); } else if (column.Type == typeof(int)) { value = reader.GetInt32(i); } else if (column.Type == typeof(Int64)) { value = reader.GetInt64(i); } else if (column.Type == typeof(bool)) { value = reader.GetInt32(i) != 0; } else if (column.Type == typeof(DateTime)) { value = reader.GetDateTime(i); } else if (column.Type == typeof(TimeSpan)) { var raw = reader.GetInt32(i); value = TimeSpan.FromSeconds(raw); } else if (column.Type.IsEnum) { var raw = reader.GetInt32(i); value = Enum.Parse(column.Type, raw.ToString()); } if (column.IsReference) { var managedReference = data.GetType().GetProperty(column.Name).GetValue(data); managedReference.GetType().GetProperty(nameof(Model.Base.ManagedReference <ManagedObjectBase, ManagedObjectBase> .Key)).SetValue(managedReference, value); } else { data.GetType().GetProperty(column.Name).SetValue(data, value); } i++; } }
private void InsertDataIntoModelContainer(ManagedObjectBase data, object dataStore) { var addMethodinfo = dataStore.GetType().GetMethod("Add"); addMethodinfo.Invoke(dataStore, new object[] { data.Key, data }); }
private string GetValueString(ManagedMetaObject metaObjectDescriptor, ColumnDescription columnDescription, ManagedObjectBase entry) { var property = metaObjectDescriptor.Type.GetProperty(columnDescription.Name); var value = property.GetValue(entry); if (value == null) { return("NULL"); } else { if (columnDescription.IsReference) { var data = columnDescription.Type.GetProperty("Key").GetValue(value); return(data.ToString()); } else if (value.GetType() == typeof(DateTime)) { DateTime?date = value as DateTime?; if (date.HasValue) { return(date.Value.ToString("yyyy-MM-dd HH:mm:ss")); } } else if (value.GetType() == typeof(TimeSpan)) { TimeSpan?date = value as TimeSpan?; if (date.HasValue) { return(date.Value.TotalSeconds.ToString()); } } else if (value.GetType().IsEnum) { int val = (int)value; return((val).ToString()); } else if (value.GetType() == typeof(bool)) { bool?date = (bool)value; if (date.HasValue) { return((date.Value ? 1 : 0).ToString()); } } else { return(value.ToString()); } } return(null); }