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)); } } }
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)); } } } }
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); }
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; }
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); }
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); }
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); }
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); } } }
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; }
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); }
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; }
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); }