/// <summary> /// Retrieve EdgeObject according to delivery object ideintity fields to get GK /// if found, check if additional fields were changed and set Status to accordingly /// </summary> /// <param name="deliveryObject"></param> /// <param name="selectEdgeObjectCommand"></param> private void SetDeliveryObjectByEdgeObject(DeliveryEdgeObject deliveryObject, SqlCommand selectEdgeObjectCommand) { // set identity fields parameters values to retrieve relevant edge object foreach (var identity in deliveryObject.FieldList.Where(x => x.IsIdentity)) { selectEdgeObjectCommand.Parameters[String.Format("@{0}", identity.FieldName)].Value = identity.Value; } using (var reader = selectEdgeObjectCommand.ExecuteReader()) { while (reader.Read()) { // if found set GK deliveryObject.GK = reader["GK"].ToString(); deliveryObject.IdentityStatus = IdentityStatus.Unchanged; // check if additional fields where changed, if yes --> set status to Modified foreach (var field in deliveryObject.FieldList.Where(x => !x.IsIdentity)) { if (field.Value != reader[field.FieldName].ToString()) { deliveryObject.IdentityStatus = IdentityStatus.Modified; break; } } } } }
/// <summary> /// Load objects by type from Delivery DB (by identity fields) /// </summary> /// <param name="edgeType"></param> /// <returns></returns> private IEnumerable <DeliveryEdgeObject> GetDeliveryObjects(EdgeType edgeType) { var columnsStr = edgeType.Fields.Aggregate(String.Empty, (current, field) => String.Format("{0}{1},", current, field.ColumnNameGK)); if (columnsStr.Length == 0) { return(null); } columnsStr = columnsStr.Remove(columnsStr.Length - 1, 1); var deliveryObjects = new List <DeliveryEdgeObject>(); using (var command = new SqlCommand { Connection = _deliverySqlConnection }) { command.CommandText = String.Format("SELECT TK, {0} FROM {1} WHERE TYPEID = @typeId", columnsStr, GetDeliveryTableName(edgeType.TableName)); command.Parameters.Add(new SqlParameter("@typeId", edgeType.TypeID)); using (var reader = command.ExecuteReader()) { while (reader.Read()) { var deliveryObj = new DeliveryEdgeObject { TK = reader["TK"].ToString() }; foreach (var field in edgeType.Fields) { deliveryObj.FieldList.Add(new FieldValue { FieldName = field.ColumnNameGK, IsIdentity = field.IsIdentity, Value = reader[field.ColumnNameGK].ToString() }); } deliveryObjects.Add(deliveryObj); } } } return(deliveryObjects); }