コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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++;
            }
        }
コード例 #4
0
        private void InsertDataIntoModelContainer(ManagedObjectBase data, object dataStore)
        {
            var addMethodinfo = dataStore.GetType().GetMethod("Add");

            addMethodinfo.Invoke(dataStore, new object[] { data.Key, data });
        }
コード例 #5
0
        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);
        }