/// <summary>
        /// Handles changes for all fields except contact as contact in this case
        /// is a derived class used to represent data from a child class, contact title
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            /*
             * We need to know which column the current cell name is to set properties
             * below
             */
            var currentColumnName = gridView.CurrentCell.OwningColumn.Name;

            var customerEntity = _customersBindingSource.CurrentCustomerEntity();
            var customer       = context.Customers
                                 .FirstOrDefault(cust =>
                                                 cust.CustomerIdentifier == customerEntity.CustomerIdentifier);

            /*
             * Handle DataGridViewComboBox columns
             *
             * IMPORTANT: Here FirstOrDefault is used without checking if the returning
             * item is null or not, for your project check for null.
             */
            try
            {
                if (currentColumnName == "ContactTitleColumn")
                {
                    // ReSharper disable once PossibleNullReferenceException
                    var contactTitleIdentifier = context.ContactTypes
                                                 .FirstOrDefault(contactType => contactType.ContactTitle == gridView.EditingControl.Text)
                                                 .ContactTypeIdentifier;

                    context.Entry(customer).Property(x => x.ContactTypeIdentifier)
                    .CurrentValue = contactTitleIdentifier;
                }
                else if (currentColumnName == "CountyNameColumn")
                {
                    var countryIdentifier = context.Countries
                                            .FirstOrDefault(country => country.Name == gridView.EditingControl.Text)
                                            .CountryIdentifier;

                    context.Entry(customer).Property(x => x.CountryIdentifier)
                    .CurrentValue = countryIdentifier;
                }
                else
                {
                    context.Entry(customer).Property(gridView.CurrentCell.OwningColumn.DataPropertyName)
                    .CurrentValue = gridView.EditingControl.Text;
                }
            }
            catch (Exception ex)
            {
                /*
                 * rule violations e.g. max length exceeded, required field empty
                 * which would be annotated on class properties used to communicate
                 * with tables in the database.
                 */
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Demo get only changed fields
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            var item = view.FirstOrDefault(c => c.CustomerIdentifier == 4);



            var entry = context.Entry(item);

            if (entry.State != EntityState.Modified)
            {
                return;
            }
            //CheckIfDifferent(entry);
            var originalEntity = context.Customers.AsNoTracking()
                                 .FirstOrDefault(me => me.CustomerIdentifier == item.CustomerIdentifier);

            Console.WriteLine();


            foreach (var propertyName in entry.CurrentValues.PropertyNames)
            {
                //Console.WriteLine("Property Name: {0}", propertyName);

                //get original value
                var orgVal = entry.OriginalValues[propertyName];
                //Console.WriteLine("     Original Value: {0}", orgVal);

                //get current values
                var curVal = entry.CurrentValues[propertyName];
                //Console.WriteLine("     Current Value: {0}", curVal);


                if (!orgVal.Equals(curVal))
                {
                    Console.WriteLine($"{propertyName} -> {orgVal} - {curVal}");
                }
            }
        }