관리 메뉴

웹개발자의 기지개

[ASP.Net Core] 복잡한 데이터 모델 (1대다대1) 본문

ASP.NET/ASP.NET Core

[ASP.Net Core] 복잡한 데이터 모델 (1대다대1)

웹개발자 워니 2024. 3. 15. 02:41

 

위와 같은 복잡한 모델을 가진 경우, EntityFramework 를 활용하여 코딩을 하는 아주 좋은 예제이다.

 

1대다대1

 

Student - Enrollment - Course : 학생 - 수강 등록 - 교과 과정

 

[Student]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class Student
    {
        public int ID { get; set; }
        [Required]
        [StringLength(50)]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [Required]
        [StringLength(50)]
        [Column("FirstName")]
        [Display(Name = "First Name")]
        public string FirstMidName { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Enrollment Date")]
        public DateTime EnrollmentDate { get; set; }
        [Display(Name = "Full Name")]
        public string FullName
        {
            get
            {
                return LastName + ", " + FirstMidName;
            }
        }
 
        public ICollection<Enrollment> Enrollments { get; set; }
    }
}
cs

 

 

[Enrollment]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public enum Grade
    {
        A, B, C, D, F
    }
 
    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        [DisplayFormat(NullDisplayText = "No grade")]
        public Grade? Grade { get; set; }
 
        public Course Course { get; set; }
        public Student Student { get; set; }
    }
}
cs

 

 

[Course]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Display(Name = "Number")]
        public int CourseID { get; set; }
 
        [StringLength(50, MinimumLength = 3)]
        public string Title { get; set; }
 
        [Range(05)]
        public int Credits { get; set; }
 
        public int DepartmentID { get; set; }
 
        public Department Department { get; set; }
        public ICollection<Enrollment> Enrollments { get; set; }
        public ICollection<CourseAssignment> CourseAssignments { get; set; }
    }
}
cs

 

[Department]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class Department
    {
        public int DepartmentID { get; set; }
 
        [StringLength(50, MinimumLength = 3)]
        public string Name { get; set; }
 
        [DataType(DataType.Currency)]
        [Column(TypeName = "money")]
        public decimal Budget { get; set; }
 
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Start Date")]
        public DateTime StartDate { get; set; }
 
        public int? InstructorID { get; set; }
 
        public Instructor Administrator { get; set; }
        public ICollection<Course> Courses { get; set; }
    }
}
cs

 

 

 

Instructor - CourseAssignment - Course : 선생님 -  교과과정 할당 - 교과 과정

 

[Instructor]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class Instructor
    {
        public int ID { get; set; }
 
        [Required]
        [Display(Name = "Last Name")]
        [StringLength(50)]
        public string LastName { get; set; }
 
        [Required]
        [Column("FirstName")]
        [Display(Name = "First Name")]
        [StringLength(50)]
        public string FirstMidName { get; set; }
 
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Hire Date")]
        public DateTime HireDate { get; set; }
 
        [Display(Name = "Full Name")]
        public string FullName
        {
            get { return LastName + ", " + FirstMidName; }
        }
 
        public ICollection<CourseAssignment> CourseAssignments { get; set; }
        public OfficeAssignment OfficeAssignment { get; set; }
    }
}
cs

 

 

[CourseAssignment]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class CourseAssignment
    {
        public int InstructorID { get; set; }
        public int CourseID { get; set; }
        public Instructor Instructor { get; set; }
        public Course Course { get; set; }
    }
}
cs

 

 

[Course]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace ContosoUniversity.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Display(Name = "Number")]
        public int CourseID { get; set; }
 
        [StringLength(50, MinimumLength = 3)]
        public string Title { get; set; }
 
        [Range(05)]
        public int Credits { get; set; }
 
        public int DepartmentID { get; set; }
 
        public Department Department { get; set; }
        public ICollection<Enrollment> Enrollments { get; set; }
        public ICollection<CourseAssignment> CourseAssignments { get; set; }
    }
}
cs

 

 

https://learn.microsoft.com/ko-kr/aspnet/core/data/ef-mvc/complex-data-model?view=aspnetcore-6.0

 

자습서: 복잡한 데이터 모델 만들기 - ASP.NET MVC 및 EF Core 사용

이 자습서에서는 더 많은 엔터티 및 관계를 추가하고, 서식 지정, 유효성 검사 및 매핑 규칙을 지정하여 데이터 모델을 사용자 지정합니다.

learn.microsoft.com

 

 

자습서: 관련 데이터 읽기 - ASP.NET MVC 및 EF Core 사용 | Microsoft Learn

 

자습서: 관련 데이터 읽기 - ASP.NET MVC 및 EF Core 사용

이 자습서에서는 관련 데이터 즉, Entity Framework에서 탐색 속성으로 로드하는 데이터를 읽고 표시합니다.

learn.microsoft.com

 

자습서: 관련 데이터 업데이트 - ASP.NET MVC 및 EF Core 사용 | Microsoft Learn

 

자습서: 관련 데이터 업데이트 - ASP.NET MVC 및 EF Core 사용

이 자습서에서는 외래 키 필드 및 탐색 속성을 업데이트하여 관련 데이터를 업데이트합니다.

learn.microsoft.com

 

자습서: 동시성 처리 - ASP.NET MVC 및 EF Core 사용 | Microsoft Learn

 

자습서: 동시성 처리 - ASP.NET MVC 및 EF Core 사용

이 자습서에는 여러 사용자가 동시에 같은 엔터티를 업데이트하는 경우 충돌을 처리하는 방법을 보여 줍니다.

learn.microsoft.com

 

자습서: 상속 구현 - ASP.NET MVC 및 EF Core 사용 | Microsoft Learn

 

자습서: 상속 구현 - ASP.NET MVC 및 EF Core 사용

이 자습서에서는 ASP.NET Core 애플리케이션에서 Entity Framework Core를 사용하여 데이터 모델에서 상속을 구현하는 방법을 보여 줍니다.

learn.microsoft.com

 

https://learn.microsoft.com/ko-kr/aspnet/core/data/ef-rp/complex-data-model?view=aspnetcore-6.0&tabs=visual-studio

 

5부. ASP.NET Core에서 EF Core를 사용한 Razor Pages - 데이터 모델

Razor Pages 및 Entity Framework 자습서 시리즈의 5부입니다.

learn.microsoft.com

 

 

Comments