/// <summary>
        /// Updates the repair status properties of the <paramref name="dvirDefect"/> using properties of the <paramref name="dbDVIRDefectUpdate"/>.
        /// </summary>
        /// <param name="dvirDefect">The <see cref="DVIRDefect"/> to be updated.</param>
        /// <param name="dbDVIRDefectUpdate">The <see cref="DbDVIRDefectUpdate"/> from which to obtain the property values for the <paramref name="dvirDefect"/> update.</param>
        /// <returns></returns>
        bool UpdateDVIRDefectRepairStatus(DVIRDefect dvirDefect, DbDVIRDefectUpdate dbDVIRDefectUpdate)
        {
            MethodBase methodBase = MethodBase.GetCurrentMethod();

            logger.Trace($"Begin {methodBase.ReflectedType.Name}.{methodBase.Name}");

            // Check whether the DbDVIRDefectUpdate repair status properties are populated.
            if (dbDVIRDefectUpdate.RepairDateTime == null && dbDVIRDefectUpdate.RepairStatus == null && dbDVIRDefectUpdate.RepairUserId == null)
            {
                // No repair status update.
                return(false);
            }

            // Proceed only if the DVIRDefect's RepairStatus has not already been set.
            if (dvirDefect.RepairStatus != null && dvirDefect.RepairStatus != RepairStatusType.NotRepaired)
            {
                throw new ArgumentException($"RepairStatus of the DVIRDefect has already been set and cannot be changed.");
            }

            // Ensure all repair status properties have values.
            if (dbDVIRDefectUpdate.RepairDateTime == null || dbDVIRDefectUpdate.RepairStatus == null || dbDVIRDefectUpdate.RepairUserId == null)
            {
                throw new ArgumentException($"One or more related properties (RepairDateTime, RepairStatus, or RepairUserId) of the DbDVIRDefectUpdate object are null.");
            }

            var updateRepairStatusType = dbDVIRDefectUpdate.RepairStatus switch
            {
                nameof(RepairStatusType.NotNecessary) => RepairStatusType.NotNecessary,
                nameof(RepairStatusType.Repaired) => RepairStatusType.Repaired,
                _ => throw new ArgumentException($"Invalid RepairStatus value. RepairStatus must be set to either 'Repaired' or 'NotNecessary'."),
            };

            // Update the repair status.
            var updateRepairUser = new User {
                Id = Id.Create(dbDVIRDefectUpdate.RepairUserId)
            };

            dvirDefect.RepairDateTime = dbDVIRDefectUpdate.RepairDateTime;
            dvirDefect.RepairStatus   = updateRepairStatusType;
            dvirDefect.RepairUser     = updateRepairUser;

            logger.Trace($"End {methodBase.ReflectedType.Name}.{methodBase.Name}");
            return(true);
        }
        /// <summary>
        /// Adds a <see cref="DefectRemark"/> to the <paramref name="dvirDefect"/> using properties of the <paramref name="dbDVIRDefectUpdate"/>.
        /// </summary>
        /// <param name="dvirDefect">The <see cref="DVIRDefect"/> to which a <see cref="DefectRemark"/> is to be added.</param>
        /// <param name="dbDVIRDefectUpdate">The <see cref="DbDVIRDefectUpdate"/> from which to obtain the property values for the <see cref="DefectRemark"/> that is to be added to the <paramref name="dvirDefect"/>.</param>
        /// <returns></returns>
        bool AddDefectRemark(DVIRDefect dvirDefect, DbDVIRDefectUpdate dbDVIRDefectUpdate)
        {
            MethodBase methodBase = MethodBase.GetCurrentMethod();

            logger.Trace($"Begin {methodBase.ReflectedType.Name}.{methodBase.Name}");

            // Check whether the DbDVIRDefectUpdate includes a remark to be added.
            if (dbDVIRDefectUpdate.Remark == null && dbDVIRDefectUpdate.RemarkDateTime == null && dbDVIRDefectUpdate.RemarkUserId == null)
            {
                // No remark to add.
                return(false);
            }

            // Ensure all remark-related properties have values.
            if (dbDVIRDefectUpdate.Remark == null || dbDVIRDefectUpdate.RemarkDateTime == null || dbDVIRDefectUpdate.RemarkUserId == null)
            {
                throw new ArgumentException($"Cannot add DefectRemark to DVIRDefect because one or more DefectRemark-related properties (Remark, RemarkDateTime, or RemarkUserId) of the DbDVIRDefectUpdate object are null.");
            }

            // Add the remark.
            DefectRemark defectRemark = new()
            {
                User = new User {
                    Id = Id.Create(dbDVIRDefectUpdate.RemarkUserId)
                },
                DateTime = dbDVIRDefectUpdate.RemarkDateTime,
                Remark   = dbDVIRDefectUpdate.Remark
            };

            if (dvirDefect.DefectRemarks == null)
            {
                dvirDefect.DefectRemarks = new List <DefectRemark>();
            }
            dvirDefect.DefectRemarks.Add(defectRemark);

            logger.Trace($"End {methodBase.ReflectedType.Name}.{methodBase.Name}");
            return(true);
        }
 /// <summary>
 /// Deletes a <see cref="DbDVIRDefectUpdate"/> entity from the database.
 /// </summary>
 /// <param name="connectionInfo">The database connection information.</param>
 /// <param name="dbDVIRDefectUpdate">The <see cref="DbDVIRDefectUpdate"/> entity to be deleted.</param>
 /// <param name="commandTimeout">The number of seconds before command execution timeout.</param>
 /// <returns></returns>
 public static async Task <bool> DeleteAsync(ConnectionInfo connectionInfo, DbDVIRDefectUpdate dbDVIRDefectUpdate, int commandTimeout)
 {
     return(await new DbDVIRDefectUpdateRepository().DeleteAsync(connectionInfo, dbDVIRDefectUpdate, commandTimeout));
 }