/// <summary>
        /// Get the value of the primary key components for a given row
        /// </summary>
        /// <param name="row"></param>
        /// <returns></returns>
        public IList <object> GetPrimaryKeyValues(object row)
        {
            if (row == null)
            {
                return(null);
            }

            // Make sure it's of the right type, and handle collections
            row = PreprocessRowObject(row);

            return(Misc.GetKeyValues(PrimaryKeyColumns, row));
        }