Пример #1
0
        private void ProcessObjectForDelete(object objectToDelete, Type objectType, Stack <SqlCommand> deleteFirstCommands, Stack <SqlCommand> deleteCommands)
        {
            PersistentClass persistentClassAttribute = (PersistentClass)objectType.GetCustomAttributes(typeof(PersistentClass), false).Single();
            PropertyInfo    keyProperty       = objectType.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(PersistentPrimaryKeyProperty))).Single();
            PropertyBridge  keyPropertyBridge = PropertyBridgeFactory.GetPropertyBridge(keyProperty, objectToDelete);

            if (persistentClassAttribute.IsPersisted == true)
            {
                if (persistentClassAttribute.IsManyToManyRelationship == true)
                {
                    deleteFirstCommands.Push(this.CreateSqlCommand(keyPropertyBridge, persistentClassAttribute.StorageName));
                }
                else
                {
                    deleteCommands.Push(this.CreateSqlCommand(keyPropertyBridge, persistentClassAttribute.StorageName));
                }
            }

            if (persistentClassAttribute.HasPersistentBaseClass == true)
            {
                if (persistentClassAttribute.IsManyToManyRelationship == true)
                {
                    deleteFirstCommands.Push(this.CreateSqlCommand(keyPropertyBridge, persistentClassAttribute.BaseStorageName));
                }
                else
                {
                    deleteCommands.Push(this.CreateSqlCommand(keyPropertyBridge, persistentClassAttribute.BaseStorageName));
                }
            }
        }
Пример #2
0
        private void ProcessObjectForUpdate(object objectToUpdate, Type objectType, object originalValues, Queue <SqlCommand> commandQueue)
        {
            if (PersistenceHelper.ArePersistentPropertiesEqual(objectToUpdate, originalValues) == false)
            {
                PersistentClass persistentClassAttribute = (PersistentClass)objectType.GetCustomAttributes(typeof(PersistentClass), false).Single();

                PropertyInfo   keyProperty       = objectType.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(PersistentPrimaryKeyProperty))).Single();
                PropertyBridge keyPropertyBridge = PropertyBridgeFactory.GetPropertyBridge(keyProperty, objectToUpdate);

                if (persistentClassAttribute.HasPersistentBaseClass == true)
                {
                    Type rootType = PersistenceHelper.GetRootType(objectToUpdate);
                    List <PropertyBridge> basePropertyBridgeList = this.GetPropertyBridgeList(rootType, objectToUpdate, originalValues);
                    if (basePropertyBridgeList.Count != 0)
                    {
                        commandQueue.Enqueue(this.CreateSqlCommand(keyPropertyBridge, basePropertyBridgeList, persistentClassAttribute.BaseStorageName));
                    }
                }

                if (persistentClassAttribute.IsPersisted == true)
                {
                    List <PropertyBridge> propertyBridgeList = this.GetPropertyBridgeList(objectType, objectToUpdate, originalValues);
                    if (propertyBridgeList.Count != 0)
                    {
                        commandQueue.Enqueue(this.CreateSqlCommand(keyPropertyBridge, propertyBridgeList, persistentClassAttribute.StorageName));
                    }
                }
            }
        }
Пример #3
0
        private List <PropertyBridge> GetPropertyBridgeList(Type type, object objectToUpdate, object originalValues)
        {
            List <PropertyBridge> propertyBridgeList = new List <PropertyBridge>();
            List <PropertyInfo>   properties         = PersistenceHelper.GetPropertiesToHandle(type);

            foreach (PropertyInfo property in properties)
            {
                var originalValue = property.GetValue(originalValues, null);
                var currentValue  = property.GetValue(objectToUpdate, null);

                if (currentValue == null && originalValue != null)
                {
                    PropertyBridge propertyBridge = PropertyBridgeFactory.GetPropertyBridge(property, objectToUpdate);
                    propertyBridgeList.Add(propertyBridge);
                }
                if (currentValue != null && originalValue == null)
                {
                    PropertyBridge propertyBridge = PropertyBridgeFactory.GetPropertyBridge(property, objectToUpdate);
                    propertyBridgeList.Add(propertyBridge);
                }
                else if (currentValue != null && originalValue != null)
                {
                    if (currentValue.Equals(originalValue) == false)
                    {
                        PropertyBridge propertyBridge = PropertyBridgeFactory.GetPropertyBridge(property, objectToUpdate);
                        propertyBridgeList.Add(propertyBridge);
                    }
                }
            }

            return(propertyBridgeList);
        }
Пример #4
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, string storageName)
        {
            SqlCommand cmd = new SqlCommand();

            StringBuilder sqlStatement = new StringBuilder("Delete " + storageName);
            sqlStatement.Append(" Where " + keyPropertyBridge.Name + " = " + keyPropertyBridge.AtName);

            cmd.CommandText = sqlStatement.ToString();
            keyPropertyBridge.SetSqlParameter(cmd);

            return cmd;
        }
Пример #5
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, string storageName)
        {
            SqlCommand cmd = new SqlCommand();

            StringBuilder sqlStatement = new StringBuilder("Delete " + storageName);

            sqlStatement.Append(" Where " + keyPropertyBridge.Name + " = " + keyPropertyBridge.AtName);

            cmd.CommandText = sqlStatement.ToString();
            keyPropertyBridge.SetSqlParameter(cmd);

            return(cmd);
        }
Пример #6
0
        public static PropertyBridge GetPropertyBridge(PropertyInfo property, object obj)
        {
            PropertyBridge propertyBridge = null;

            if (property.PropertyType.Name == typeof(string).Name)
            {
                propertyBridge = new StringPropertyBridge(property, obj);
            }
            else if (property.PropertyType.Name == typeof(bool).Name)
            {
                propertyBridge = new BooleanPropertyBridge(property, obj);
            }
            else if (property.PropertyType.Name == typeof(int).Name)
            {
                propertyBridge = new IntPropertyBridge(property, obj);
            }
            else if (property.PropertyType.Name == typeof(double).Name)
            {
                propertyBridge = new DoublePropertyBridge(property, obj);
            }
            else if (property.PropertyType.Name == typeof(DateTime).Name)
            {
                propertyBridge = new DateTimePropertyBridge(property, obj);
            }
            else if (property.PropertyType.IsGenericType)
            {
                Type genericTypeDef = property.PropertyType.UnderlyingSystemType;
                if (genericTypeDef == typeof(Nullable <DateTime>))
                {
                    propertyBridge = new DateTimePropertyBridge(property, obj);
                }
                else if (genericTypeDef == typeof(Nullable <int>))
                {
                    propertyBridge = new IntPropertyBridge(property, obj);
                }
                else if (genericTypeDef == typeof(Nullable <double>))
                {
                    propertyBridge = new DoublePropertyBridge(property, obj);
                }
                else if (genericTypeDef == typeof(Nullable <bool>))
                {
                    propertyBridge = new IntPropertyBridge(property, obj);
                }
            }
            else
            {
                throw new Exception("This data type not implemented in the Property Bridge Factory");
            }
            return(propertyBridge);
        }
Пример #7
0
        private List <PropertyBridge> GetPropertyBridgeList(Type type, object o)
        {
            List <PropertyBridge> propertyBridgeList = new List <PropertyBridge>();
            List <PropertyInfo>   properties         = PersistenceHelper.GetPropertiesToHandle(type);

            foreach (PropertyInfo property in properties)
            {
                var currentValue = property.GetValue(o, null);
                if (currentValue != null)
                {
                    PropertyBridge propertyBridge = PropertyBridgeFactory.GetPropertyBridge(property, o);
                    propertyBridgeList.Add(propertyBridge);
                }
            }

            return(propertyBridgeList);
        }
Пример #8
0
        private void ProcessObjectForInsert(object objectToInsert, Type objectType, Queue <SqlCommand> insertCommands, Queue <SqlCommand> insertLastCommands)
        {
            PersistentClass persistentClassAttribute = (PersistentClass)objectType.GetCustomAttributes(typeof(PersistentClass), false).Single();
            PropertyInfo    keyProperty = objectType.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(PersistentPrimaryKeyProperty))).Single();
            PersistentPrimaryKeyProperty keyAttribute = (PersistentPrimaryKeyProperty)keyProperty.GetCustomAttributes(typeof(PersistentPrimaryKeyProperty), false).Single();
            PropertyBridge keyPropertyBridge          = PropertyBridgeFactory.GetPropertyBridge(keyProperty, objectToInsert);
            string         keyPropertyValue           = (string)keyPropertyBridge.GetPropertyValue();

            if (this.m_InsertSubclassOnly == false)
            {
                if (persistentClassAttribute.HasPersistentBaseClass == true)
                {
                    Type rootType = PersistenceHelper.GetRootType(objectToInsert);
                    List <PropertyBridge> basePropertyBridgeList = this.GetPropertyBridgeList(rootType, objectToInsert);
                    if (persistentClassAttribute.IsManyToManyRelationship == true)
                    {
                        SqlCommand sqlCommand = this.CreateSqlCommand(keyPropertyBridge, basePropertyBridgeList, persistentClassAttribute.BaseStorageName, keyAttribute.IsAutoGenerated);
                        insertLastCommands.Enqueue(sqlCommand);
                    }
                    else
                    {
                        SqlCommand sqlCommand = this.CreateSqlCommand(keyPropertyBridge, basePropertyBridgeList, persistentClassAttribute.BaseStorageName, keyAttribute.IsAutoGenerated);
                        insertCommands.Enqueue(sqlCommand);
                    }
                }
            }

            if (persistentClassAttribute.IsPersisted == true)
            {
                List <PropertyBridge> propertyBridgeList = this.GetPropertyBridgeList(objectType, objectToInsert);
                if (persistentClassAttribute.IsManyToManyRelationship == true)
                {
                    SqlCommand sqlCommandToAdd = this.CreateSqlCommand(keyPropertyBridge, propertyBridgeList, persistentClassAttribute.StorageName, keyAttribute.IsAutoGenerated);
                    insertLastCommands.Enqueue(sqlCommandToAdd);
                }
                else
                {
                    SqlCommand sqlCommand = this.CreateSqlCommand(keyPropertyBridge, propertyBridgeList, persistentClassAttribute.StorageName, keyAttribute.IsAutoGenerated);
                    insertCommands.Enqueue(sqlCommand);
                }
            }
        }
Пример #9
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, List<PropertyBridge> propertyBridgeList, string storageName, bool isAutoGenerated)
        {
            SqlCommand cmd = new SqlCommand();

            StringBuilder sqlUpdateStatement = new StringBuilder("Insert " + storageName);
            StringBuilder fieldList = new StringBuilder();
            StringBuilder parameterList = new StringBuilder();

            for (int i = 0; i < propertyBridgeList.Count; i++)
            {
                fieldList.Append("[" + propertyBridgeList[i].Name + "]");
                fieldList.Append(", ");

                parameterList.Append(propertyBridgeList[i].AtName);
                parameterList.Append(", ");
            }

            if (isAutoGenerated == true)
            {
                fieldList.Remove(fieldList.Length - 2, 2);
                parameterList.Remove(parameterList.Length - 2, 2);
            }
            else
            {
                fieldList.Append(keyPropertyBridge.Name);
                parameterList.Append(keyPropertyBridge.AtName);
            }

            sqlUpdateStatement.Append("(" + fieldList + ")");
            sqlUpdateStatement.Append(" Values ");
            sqlUpdateStatement.Append("(" + parameterList + ")");

            cmd.CommandText = sqlUpdateStatement.ToString();
            keyPropertyBridge.SetSqlParameter(cmd);
            foreach (PropertyBridge propertyBridge in propertyBridgeList)
            {
                propertyBridge.SetSqlParameter(cmd);
            }

            return cmd;
        }
Пример #10
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, List <PropertyBridge> propertyBridgeList, string storageName, bool isAutoGenerated)
        {
            SqlCommand cmd = new SqlCommand();

            StringBuilder sqlUpdateStatement = new StringBuilder("Insert " + storageName);
            StringBuilder fieldList          = new StringBuilder();
            StringBuilder parameterList      = new StringBuilder();

            for (int i = 0; i < propertyBridgeList.Count; i++)
            {
                fieldList.Append("[" + propertyBridgeList[i].Name + "]");
                fieldList.Append(", ");

                parameterList.Append(propertyBridgeList[i].AtName);
                parameterList.Append(", ");
            }

            if (isAutoGenerated == true)
            {
                fieldList.Remove(fieldList.Length - 2, 2);
                parameterList.Remove(parameterList.Length - 2, 2);
            }
            else
            {
                fieldList.Append(keyPropertyBridge.Name);
                parameterList.Append(keyPropertyBridge.AtName);
            }

            sqlUpdateStatement.Append("(" + fieldList + ")");
            sqlUpdateStatement.Append(" Values ");
            sqlUpdateStatement.Append("(" + parameterList + ")");

            cmd.CommandText = sqlUpdateStatement.ToString();
            keyPropertyBridge.SetSqlParameter(cmd);
            foreach (PropertyBridge propertyBridge in propertyBridgeList)
            {
                propertyBridge.SetSqlParameter(cmd);
            }

            return(cmd);
        }
Пример #11
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, List<PropertyBridge> propertyBridgeList, string storageName)
        {
            SqlCommand cmd = new SqlCommand();

            keyPropertyBridge.SetSqlParameter(cmd);
            StringBuilder sqlStatement = new StringBuilder("Update " + storageName + " Set ");

            for (int i = 0; i < propertyBridgeList.Count; i++)
            {
                sqlStatement.Append("[" + propertyBridgeList[i].Name + "] = " + propertyBridgeList[i].AtName);
                if (i != propertyBridgeList.Count - 1)
                {
                    sqlStatement.Append(", ");
                }
                propertyBridgeList[i].SetSqlParameter(cmd);
            }

            sqlStatement.Append(" Where " + keyPropertyBridge.Name + " = " + keyPropertyBridge.AtName);
            cmd.CommandText = sqlStatement.ToString();

            return cmd;
        }
Пример #12
0
        private SqlCommand CreateSqlCommand(PropertyBridge keyPropertyBridge, List <PropertyBridge> propertyBridgeList, string storageName)
        {
            SqlCommand cmd = new SqlCommand();

            keyPropertyBridge.SetSqlParameter(cmd);
            StringBuilder sqlStatement = new StringBuilder("Update " + storageName + " Set ");

            for (int i = 0; i < propertyBridgeList.Count; i++)
            {
                sqlStatement.Append("[" + propertyBridgeList[i].Name + "] = " + propertyBridgeList[i].AtName);
                if (i != propertyBridgeList.Count - 1)
                {
                    sqlStatement.Append(", ");
                }
                propertyBridgeList[i].SetSqlParameter(cmd);
            }

            sqlStatement.Append(" Where " + keyPropertyBridge.Name + " = " + keyPropertyBridge.AtName);
            cmd.CommandText = sqlStatement.ToString();

            return(cmd);
        }