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 }