/// <summary>
        /// Validates the values.
        /// </summary>
        /// <returns></returns>
        private bool ValidateValues()
        {
            bool isValid = false;

            if (!string.IsNullOrEmpty(this.RelationshipNameTextBox.Text))
            {
                isValid = char.IsLetter(this.RelationshipNameTextBox.Text.FirstOrDefault()) && this.RelationshipNameTextBox.Text.FirstOrDefault() == char.ToLower(this.RelationshipNameTextBox.Text.FirstOrDefault());
                if (isValid)
                {
                    modelEntityRelationship rel = parentWindow.SelectedEntity.relationship.FirstOrDefault(r => r.name == RelationshipNameTextBox.Text);
                    if (rel != null)
                    {
                        if (rel != this.EntityRelationshipModel)
                        {
                            isValid = false;
                            MessageBox.Show(MessageResources.NameBeenUsedRelationship, MessageResources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
                else
                {
                    MessageBox.Show(MessageResources.InvalidRelationshipName, MessageResources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            else
            {
                MessageBox.Show(MessageResources.EmptyRelationshipName, MessageResources.Error, MessageBoxButton.OK, MessageBoxImage.Error);
            }

            return(isValid);
        }
 /// <summary>
 /// Handles the Click event of the OKButton control.
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
 private void OKButton_Click(object sender, RoutedEventArgs e)
 {
     if (this.ValidateValues())
     {
         this.EntityRelationshipModel.name = this.RelationshipNameTextBox.Text;
         this.DialogResult = true;
         this.EntityRelationshipModel.clientKey         = clientKeys;
         this.EntityRelationshipModel.destinationEntity = destination;
         this.EntityRelationshipModel.toMany            = Helper.ConvertBoolToString(MultipleRelationshipsCheckBox.IsChecked);
         var inverseItem = InverseComboBox.SelectedItem.ToString();
         if (inverseItem.Equals("No Inverse"))
         {
             var messageResult = MessageBox.Show("Do you want to auto-generate it?", "Missing inverse relationship",
                                                 MessageBoxButton.YesNo, MessageBoxImage.Question);
             if (messageResult == MessageBoxResult.Yes)
             {
                 var inverseRelation = new modelEntityRelationship();
                 inverseRelation.name = "r_" + parentWindow.SelectedEntity.name;
                 inverseRelation.destinationEntity          = parentWindow.SelectedEntity.name;
                 inverseRelation.inverseName                = this.EntityRelationshipModel.name;
                 inverseRelation.inverseEntity              = destination;
                 inverseRelation.toMany                     = Helper.ConvertBoolToString(!MultipleRelationshipsCheckBox.IsChecked);
                 this.EntityRelationshipModel.inverseEntity = inverseRelation.destinationEntity;
                 this.EntityRelationshipModel.inverseName   = inverseRelation.name;
                 var         entities       = ((ViewModel)parentWindow.DataContext).XmlTemplateModel.entity;
                 modelEntity selectedEntity = null;
                 foreach (var currentEntity in entities)
                 {
                     if (currentEntity.name.Equals(destination))
                     {
                         selectedEntity = currentEntity;
                     }
                 }
                 if (selectedEntity != null)
                 {
                     selectedEntity.relationship.Add(inverseRelation);
                 }
             }
             else if (messageResult == MessageBoxResult.No)
             {
                 this.EntityRelationshipModel.inverseEntity = this.InverseComboBox.SelectedItem.ToString();
             }
         }
     }
     else
     {
         this.RelationshipNameTextBox.Text = this.EntityRelationshipModel.name;
     }
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="RelationshipManagementWindow"/> class.
        /// </summary>
        /// <param name="relationship">The relationship.</param>
        public RelationshipManagementWindow(modelEntityRelationship relationship, VsDesignerControl parent)
        {
            InitializeComponent();

            parentWindow = parent;

            this.EntityRelationshipModel = relationship;

            if (this.EntityRelationshipModel != null)
            {
                this.RelationshipNameTextBox.Text            = this.EntityRelationshipModel.name;
                this.MultipleRelationshipsCheckBox.IsChecked = Helper.ValidateBoolFromString(this.EntityRelationshipModel.toMany == null ? "False" : EntityRelationshipModel.toMany);
                this.LoadComboBoxes();
                this.RelationshipNameTextBox.SelectAll();
                this.RelationshipNameTextBox.Focus();
                this.ClientKeyRelationsDataGrid.ItemsSource = clientKeys;
            }
        }
        /// <summary>
        /// Handles the SelectionChanged event of the InverseComboBox control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.Controls.SelectionChangedEventArgs"/> instance containing the event data.</param>
        private void InverseComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string inverse = this.InverseComboBox.SelectedItem.ToString();

            // Logic to force the M:N relationships only possible via intermediary tables.
            string      selected    = this.DestinationComboBox.SelectedItem.ToString();
            modelEntity otherEntity = ((ViewModel)parentWindow.DataContext).XmlTemplateModel.entity.FirstOrDefault(ent => ent.name == selected);

            if (otherEntity != null)
            {
                modelEntityRelationship inverseRel = otherEntity.relationship.FirstOrDefault(r => r.name == inverse);
                if (inverseRel != null && Helper.ValidateBoolFromString(inverseRel.toMany))
                {
                    this.MultipleRelationshipsCheckBox.IsChecked = false;
                    this.MultipleRelationshipsCheckBox.IsEnabled = false;
                }
            }
        }