Phantom Programming 팬텀 프로그래밍
  • [ERP 개발일지] 직원 정보 입력, 출력 그리고 에러
    2024년 12월 06일 18시 40분 49초에 업로드 된 글입니다.
    작성자: Devrun
    반응형

     

    웹 개발을 하다 보면 가장 짜증 나는 부분이 에러가 표시가 안될 때가 있다. 이는 대부분 HTML 코드에서 생기는데 오늘도 이 부분을 개발하면서 문제가 발생했다.

     

    에러명: 날짜가 0001-01-01로 표시되는 이유

     

    ASP.NET Core에서는 asp-for라는 속성을 사용한다. 이는 name=""과 같은 속성인데 내 input에  asp-for와 name이 둘 다 들어있었다. ㅠㅠ 이를 1시간이나 걸려서 찾아내다니... DB 문제가 있는 줄 알았는데... 아니었다 

     

    늘 처음하는 것에서는 실수가 발생하는 법, 멘탈 잡고 다시 가즈아

     

    직원 등록 부분 코드

            public async Task<IActionResult> AddEmployee(EmployeeViewModel empvm)
            {
                if (ModelState.IsValid) {
                    var emp = new Employee
                    {
                        Employee_Name = empvm.Employee_Name,
                        Employee_Englisth_Name = empvm.Employee_English_Name,
                        Employee_Phone = empvm.Employee_Phone,
                        Employee_Email = empvm.Employee_Email,
                        Employee_DateOfBirth = empvm.Employee_DateOfBirth,
                        Employee_JoinDate = empvm.Employee_JoinDate,
                        Employee_Sex = empvm.Employee_Sex,
                    };
    
                    var edu = new EmployeeEducation
                    {
                        EducationStatus = empvm.EducationStatus,
                        School_Name = empvm.School_Name,
                        Employee = emp
                    };
    
                    var addr = new EmployeeAddress
                    {
                        Unit = empvm.Unit,
                        StreetName = empvm.StreetName,
                        City = empvm.City,
                        Province = empvm.Province,
                        PostalCode = empvm.PostalCode,
                        Employee = emp
                    };
    
                    _context.Employees.Add(emp);
                    _context.EmployeeEducation.Add(edu);
                    _context.EmployeeAddresses.Add(addr);
    
                    await _context.SaveChangesAsync();
    
                    return RedirectToAction("Index", "Employee");
                } else
                {
                    return View("ApplyEmployee", "Employee");
                }
            }

     

    ViewModel

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace ERP.Models
    {
        public class EmployeeViewModel
        {
            // Employee 기본 정보
            public int Employee_ID { get; set; }
    
            [Required]
            public string Employee_Name { get; set; }
    
            [Phone]
            public string Employee_Phone { get; set; }
    
            [EmailAddress]
            public string Employee_Email { get; set; }
    
            [Display(Name = "Date of Birth")]
            public DateOnly Employee_DateOfBirth { get; set; }
    
            [Display(Name = "Join Date")]
            public DateOnly Employee_JoinDate { get; set; }
    
            public string Employee_Sex { get; set; }
    
            public string Employee_English_Name { get; set; }
    
            [Required]
            public string School_Name { get; set; }
    
            [Required]
            public string EducationStatus { get; set; }
    
            [Required]
            public string Unit { get; set; } // 동/호
    
            [Required]
            public string StreetName { get; set; } // 도로명
    
            [Required]
            public string City { get; set; } // 도시
    
            [Required]
            public string Province { get; set; } // 도/시
    
            [Required]
            public string PostalCode { get; set; } // 우편번호
        }
    }

     

    HTML에서 Form을 사용할 때 여러 가지에 Data Model에 접근이 어렵다. 그래서 Employee, EmployeeEducation, EmployeeAddress라는 기존 모델을 하나로 합친 EmployeeViewModel을 만들어서 진행했다. 

     

    ViewModel에서 데이터를 Model로 전송

                  var emp = new Employee
                    {
                        Employee_Name = empvm.Employee_Name,
                        Employee_Englisth_Name = empvm.Employee_English_Name,
                        Employee_Phone = empvm.Employee_Phone,
                        Employee_Email = empvm.Employee_Email,
                        Employee_DateOfBirth = empvm.Employee_DateOfBirth,
                        Employee_JoinDate = empvm.Employee_JoinDate,
                        Employee_Sex = empvm.Employee_Sex,
                    };
    
                    var edu = new EmployeeEducation
                    {
                        EducationStatus = empvm.EducationStatus,
                        School_Name = empvm.School_Name,
                        Employee = emp
                    };
    
                    var addr = new EmployeeAddress
                    {
                        Unit = empvm.Unit,
                        StreetName = empvm.StreetName,
                        City = empvm.City,
                        Province = empvm.Province,
                        PostalCode = empvm.PostalCode,
                        Employee = emp
                    };

     

    바로 이 부분이 ViewModel에 데이터를 각 Model로 전송해 주는 역할을 한다.

    이렇게 하면 서로 다른 Table에 데이터를 저장해야 할 때 유용하다. 아니 필수 일 것이다. ㅋㅋㅋ

     

    관계형 데이터베이스를 쓴다면 무조건 적으로 테이블이 정규화되어 있는데, 이렇게 하지 않으면 애초에 데이터 입력이 어려울 수 있다. 아니면 수많은 버튼을 만들어야 할 것이다. (이는 만들어보면 안다.)

     

    오늘도 기능, 커밋, 블로그 완료!

    반응형
    댓글