Пример #1
0
        public static TodoTask CopyValuesFrom(this TodoTask _copyTo, TodoTask _copyFrom)
        {
            foreach (var property in _copyTo.GetType().GetProperties())
            {
                if (!property.CanWrite)
                {
                    continue;
                }
                switch (property.Name)
                {
                case nameof(_copyTo.TodoTaskId):
                case nameof(_copyTo.CreateDateTime):
                case nameof(_copyTo.UpdateDateTime):
                    // Skip Copy Value
                    break;

                default:
                    property.SetValue(_copyTo, property.GetValue(_copyFrom));
                    break;
                }
            }
            return(_copyTo);
        }
        public void Test0050()
        {
            #region テストデータ準備

            var testEntityBeforeUpdate = TestUtilLib.GenarateRandomTodoTask();
            var testEntityOfUpdate     = TestUtilLib.GenarateRandomTodoTask();
            var testEntityOfAdd1       = TestUtilLib.GenarateRandomTodoTask();
            var testEntityOfAdd2       = new TodoTask();
            testEntityOfUpdate.TodoTaskId = testEntityBeforeUpdate.TodoTaskId;
            testEntityOfUpdate.DueDate    = testEntityBeforeUpdate.DueDate.Value.AddMinutes(1);

            using (var context = new EfDbContext())
            {
                context.Add(testEntityBeforeUpdate);
                context.SaveChanges();
            }
            using (var context = new EfDbContext()) Assert.AreEqual(1, context.TodoTasks.Count());

            #endregion

            TodoTask dbEntity;
            Assert.AreEqual(1, DalTodoTask.Upsert(testEntityOfUpdate));

            #region データを取得し、結果を確認(全て一致するはず(レコード登録日時、レコード更新日時 は比較除外))

            using (var context = new EfDbContext()) dbEntity = context.TodoTasks.Find(testEntityOfUpdate.TodoTaskId);

            foreach (var property in testEntityOfUpdate.GetType().GetProperties())
            {
                switch (property.Name)
                {
                case nameof(testEntityOfUpdate.TodoTaskId):
                    Assert.AreEqual(property.GetValue(testEntityBeforeUpdate), property.GetValue(dbEntity));
                    Assert.AreEqual(property.GetValue(testEntityOfUpdate), property.GetValue(dbEntity));
                    break;

                case nameof(testEntityOfUpdate.CreateDateTime):
                case nameof(testEntityOfUpdate.UpdateDateTime):
                    break;

                default:
                    Assert.AreNotEqual(property.GetValue(testEntityBeforeUpdate), property.GetValue(dbEntity));
                    Assert.AreEqual(property.GetValue(testEntityOfUpdate), property.GetValue(dbEntity));
                    break;
                }
            }

            #endregion

            Assert.AreEqual(1, DalTodoTask.Upsert(testEntityOfAdd1));

            #region データを取得し、結果を確認(全て一致するはず(レコード登録日時、レコード更新日時 は比較除外))

            using (var context = new EfDbContext()) dbEntity = context.TodoTasks.Find(testEntityOfAdd1.TodoTaskId);

            foreach (var property in testEntityOfAdd1.GetType().GetProperties())
            {
                switch (property.Name)
                {
                case nameof(testEntityOfAdd1.CreateDateTime):
                case nameof(testEntityOfAdd1.UpdateDateTime):
                    Assert.AreNotEqual(property.GetValue(testEntityOfAdd1), property.GetValue(dbEntity));
                    break;

                default:
                    Assert.AreEqual(property.GetValue(testEntityOfAdd1), property.GetValue(dbEntity));
                    break;
                }
            }

            #endregion

            Assert.AreEqual(1, DalTodoTask.Upsert(testEntityOfAdd2));

            #region データを取得し、結果を確認(全て一致するはず(レコード登録日時、レコード更新日時 は比較除外))

            using (var context = new EfDbContext()) dbEntity = context.TodoTasks.Find(testEntityOfAdd2.TodoTaskId);

            foreach (var property in testEntityOfAdd2.GetType().GetProperties())
            {
                switch (property.Name)
                {
                case nameof(testEntityOfAdd2.CreateDateTime):
                case nameof(testEntityOfAdd2.UpdateDateTime):
                    Assert.AreNotEqual(property.GetValue(testEntityOfAdd2), property.GetValue(dbEntity));
                    break;

                default:
                    Assert.AreEqual(property.GetValue(testEntityOfAdd2), property.GetValue(dbEntity));
                    break;
                }
            }

            #endregion
        }