
엔티티프레임워크를 사용하여 테이블 간에 관계를 추가해 보겠습니다.
목차
애플리케이션 생성
.NET web-API 생성하기
개발도구 설치하기 .NET을 이용하여 웹애플리케이션을 만들기 위해서는 .NET에서 제공하는 개발도구가 필요합니다. 개발도구 다운로드는 아래 링크에서 가능합니다. .NET | Free. Cross-platform. Open Sour
jin-co.tistory.com
개체 참조하기
하나의 엔티티가 다른 엔티티를 1 대 다의 관계로 참조하는 형태를 먼저 구현해 보겠습니다.
개체 ERD
예시에 사용될 개체와 개체 간에 관계는 아래와 같습니다.

프로젝트 폴더를 열고 개체를 저장할 폴더를 생성.

item 테이블 생성
생성된 폴더에 열고 C# 클래스 파일을 생성합니다.

생성된 클래스는 아래와 같은데요.

아래와 같이 속성들을 생성합니다. 다른 테이블을 참조하는 개체는 항상 참조 대상이 되는 개체를 추가하고 그 개체의 기본키를 같이 추가합니다 (이때 참조되는 개체는 반드시 아이디를 가지고 있어야 합니다). 엔티티프레임 워크는 추가된 속성을 바탕으로 마이그레이션을 할 때 관계를 생성합니다.

order 테이블 생성
생성된 폴더에 열고 C# 클래스 파일을 생성합니다.

마찬가지로 속성들을 추가합니다.

위와 같이 관계설정 후 추가한 엔티티들을 콘텍스트 파일에 디비세트로 추가 후 마이그레이션을 완료하면 마이그레이션 파일에서 형성된 관계를 확인 가능합니다.

필드 분리하기
다음 예시로 하나의 엔티티에 포함되는 필드가 많을 때 이를 여러 엔티티로 분리하는 법과 (참조관계 아님) 추가로 1 대 1 관계를 가지는 엔티티를 추가해 보겠습니다.
개체 ERD
예시에 사용될 개체와 개체 간에 관계는 아래와 같습니다.

엔티티에 포함되는 정보가 많은 경우 여러 엔티티를 생성하고 이를 조합하여 하나의 엔티티를 생성하는 것이 관리에 용이합니다. 엔티티에 다른 엔티티를 포함하는 방법을 보겠습니다.
1) 종속되는 개체 생성하기
종속되는 엔티티는 하나의 개체 테이블 안에 포함되는 필드 중 공통되는 것을 분리하여 별도의 엔티티파일로 생성됩니다.
▶ 일반엔티티
엔티티로 사용할 클래스를 생성하고

속성 및 컨스트럭터를 추가합니다. 엔티티 프레임워크는 매개변수가 없는 컨스트럭터를 필요로 하기 때문에 에러를 방지하기 위해 매개변수가 없는 컨스트럭터도 추가합니다. 또, 종속되는 엔티티는 다른 엔티티의 필드로 포함되므로 아이디 속성을 추가하지 않습니다

▶ 이넘
이넘은 저넘의 반대로 (ㅎㅎ).. 이넘은 데이터가 정해진 값을 가질 때 이를 정해진 메뉴처럼 생성하고 사용하는 방식입니다. 해당 보기에서는 주문결제 상태가 아래와 같이 존재한다고 가정하고 종속되는 필드로 추가해 보겠습니다.

※ 이넘의 반환값은 기본적으로 숫자인데 문자형태를 원하는 경우 아래 어노테이션을 추가합니다
[EnumMember(Value = "Name")]

2) 참조되는 개체 생성하기
참조되는 엔티티는 위 개체참조에서 설명하였으므로 예시로 추가만 해 보겠습니다. 컨스트럭터 추가여부는 해당 필드가 초기값이 필요한지 여부에 따라 결정합니다.


3) 주 엔티티
마지막으로 생성된 각 필드들을 주 엔티티에 추가합니다. 마찬가지로 초기값이 필요한 속성의 경우 컨스트럭터를 통해 값을 부여합니다.


데이터베이스 관계 (제약조건) 설정하기
첫 번째 예시에서는 엔티티에서 바로 관계를 설정하였지만 별도의 설정파일을 생성하여 엔티티의 관계를 설정하는 것도 가능합니다.
엔티티 간의 관계설정을 위해 클래스를 생성하고 아래 인터페이스를 상속합니다 (인터페이스를 사용하려면 패키지가 필요: 패키지 설치는 아래 패키지 설치 항목 참조).
IEntityTypeConfiguration
▶ Order
인터페이스를 구현하고 아래와 같이 관계를 설정합니다. 보기에서는 주 엔티티와 주소 엔티티 간 1 대 1 관계, 이넘의 반환되는 값 설정, 마지막으로 아이템과 1 대 다 관계를 설정하였습니다.

콘텍스트 수정하기
생성한 개체 중 독립테이블이 가지는 개체를 디비세트로 콘텍스트에 등록합니다. 또 위에서 설정한 테이블 관계 반영을 위해 아래 코드를 추가합니다
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}

데이터베이스 생성하기
패키지 설치
Sqlite 사용하기 - 코드 우선 방식
.NET은 데이터베이스를 생성할 때 작성된 코드를 통해 데이터베이스를 생성하는 Code first (코드우선) 방식과 데이터베이스의 데이터를 바탕으로 코드를 작성하는 data first (데이터 우선) 방식을 제
jin-co.tistory.com
콘텍스트 생성
Sqlite 사용하기 - 코드 우선 방식
.NET은 데이터베이스를 생성할 때 작성된 코드를 통해 데이터베이스를 생성하는 Code first (코드우선) 방식과 데이터베이스의 데이터를 바탕으로 코드를 작성하는 data first (데이터 우선) 방식을 제
jin-co.tistory.com
콘텍스트 업데이트하기
마이그레이션을 진행하기 전에 콘텍스트 파일을 열고 생성된 개체들을 콘텍스트 파일에 반드시 추가해 주어야 합니다.

이후 서비스 설정하고 마이그레이션을 진행하면 완성됩니다.

이상으로 데이터베이스 관계를 추가하는 방법을 보았습니다.
'백엔드 > 닷넷' 카테고리의 다른 글
.NET - 프로그램 파일 정리하기: 서비스 설정 익스텐션 만들기 (0) | 2023.03.08 |
---|---|
데이터베이스 생성 시 제약조건 추가하기 (4) | 2023.02.19 |
서버 아키텍처 - 프로젝트 분산하기 (0) | 2023.02.13 |
자동 데이터베이스 생성 및 데이터 넣기 (0) | 2023.02.11 |
시퀄라이트 사용하기 - 코드 우선 방식 (0) | 2023.02.05 |