/// <summary>
        /// 引数に指定したDtDirectoryUsageをDT_DIRECTORY_USAGEテーブルへ登録する
        /// </summary>
        /// <param name="inData">登録するデータ</param>
        /// <returns>追加したデータ。エラーが発生した場合には例外を投げるためnullを返さない</returns>
        public DtDirectoryUsage CreateDtDirectoryUsageIfAlreadyMessageThrowEx(DtDirectoryUsage inData)
        {
            DtDirectoryUsage model = null;

            try
            {
                _logger.EnterJson("{0}", inData);

                DBAccessor.Models.DtDirectoryUsage entity = new DBAccessor.Models.DtDirectoryUsage(inData);

                _dbPolly.Execute(() =>
                {
                    // メッセージIDがなければ追加
                    using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings))
                    {
                        var addedAlready = db.DtDirectoryUsage.FirstOrDefault(x => x.MessageId == inData.MessageId);
                        if (addedAlready != null)
                        {
                            throw new RmsAlreadyExistException(string.Format("MessageId [{0}] はすでに追加済みです。", inData.MessageId));
                        }

                        var dbdata = db.DtDirectoryUsage.Add(entity).Entity;
                        db.SaveChanges(_timePrivder);
                        model = dbdata.ToModel();
                    }
                });

                return(model);
            }
            catch (RmsAlreadyExistException)
            {
                throw;
            }
            catch (ValidationException e)
            {
                throw new RmsParameterException(e.ValidationResult.ErrorMessage, e);
            }
            catch (Exception e)
            {
                throw new RmsException("DT_DIRECTORY_USAGEテーブルへのInsertに失敗しました。", e);
            }
            finally
            {
                _logger.LeaveJson("{0}", model);
            }
        }
        public void CreateDtDirectoryUsageIfAlreadyMessageThrowExTest(
            string no,
            string in_InsertNewDataSqlPath,
            string in_DeleteNewDataSqlPath,
            string expected_DataJsonPath,
            string expected_ExceptionType,
            string expected_ExceptionMessage,
            string remarks)
        {
            // 初期データ挿入
            RepositoryTestHelper.ExecInsertSql(in_InsertNewDataSqlPath);

            // データを作成する
            var baseDateTime          = DateTime.UtcNow;
            var newDirectoryUsageData = new DtDirectoryUsage()
            {
                DeviceSid          = 1,
                SourceEquipmentUid = RepositoryTestHelper.CreateSpecifiedNumberString(30), // 上限値いっぱい
                MessageId          = RepositoryTestHelper.CreateSpecifiedNumberString(64), // 上限値いっぱい、既存でないメッセージID
                CreateDatetime     = baseDateTime
            };

            if (expected_ExceptionType == typeof(RmsException).FullName)
            {
                // 存在しないSidを指定する
                newDirectoryUsageData.DeviceSid = 999;
            }
            else if (expected_ExceptionType == typeof(ArgumentNullException).FullName)
            {
                newDirectoryUsageData = null;
            }
            else if (expected_ExceptionType == typeof(RmsAlreadyExistException).FullName)
            {
                newDirectoryUsageData.MessageId = "hoge"; // 既存のメッセージID
            }
            else if (expected_ExceptionType == typeof(RmsParameterException).FullName)
            {
                if (expected_ExceptionMessage.Contains("SourceEquipmentUid"))
                {
                    newDirectoryUsageData.SourceEquipmentUid = RepositoryTestHelper.CreateSpecifiedNumberString(65); // 上限値+1
                }
                else if (expected_ExceptionMessage.Contains("MessageId"))
                {
                    newDirectoryUsageData.MessageId = RepositoryTestHelper.CreateSpecifiedNumberString(65); // 上限値+1、既存でないメッセージ
                }
            }

            string exceptionName    = "";
            string exceptionMessage = "";

            try
            {
                var createdDirectoryUsageData = _directoryUsageRepository.CreateDtDirectoryUsageIfAlreadyMessageThrowEx(newDirectoryUsageData);
                if (createdDirectoryUsageData != null)
                {
                    // 作成日時はDB側で設定されることを確認する
                    Assert.AreNotEqual(baseDateTime, createdDirectoryUsageData.CreateDatetime);

                    // 比較に使用しない値はnull or 固定値とする
                    createdDirectoryUsageData.CreateDatetime = DateTime.Parse("2020/4/1 0:00:00");
                }

                // データのjson化
                string readJson   = Utility.ObjectExtensions.ToStringJson(createdDirectoryUsageData);
                string expectJson = null;
                if (File.Exists(expected_DataJsonPath))
                {
                    expectJson = File.ReadAllText(expected_DataJsonPath);
                }

                // データの比較
                Assert.AreEqual(expectJson, readJson);

                // TODO DBデータ内容をチェックする
            }
            catch (RmsAlreadyExistException e)
            {
                exceptionName    = e.GetType().FullName;
                exceptionMessage = e.Message;
            }
            catch (RmsParameterException e)
            {
                exceptionName    = e.GetType().FullName;
                exceptionMessage = e.Message;
            }
            catch (RmsException e)
            {
                exceptionName    = e.GetType().FullName;
                exceptionMessage = e.Message;
            }
            catch (ArgumentNullException e)
            {
                exceptionName    = e.GetType().FullName;
                exceptionMessage = typeof(DtDirectoryUsage).FullName + " is null."; // HACK ←の部分をメッセージから抽出できれば...
            }
            // 例外発生チェック
            Assert.AreEqual(expected_ExceptionType, exceptionName);
            Assert.AreEqual(expected_ExceptionMessage, exceptionMessage);

            // 後処理
            RepositoryTestHelper.ExecDeleteSql(in_DeleteNewDataSqlPath);
        }