이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 36284|회답: 0

[출처] EF 코어 시리즈 (3) 엔터티 프레임 섀도우 속성 [재인쇄]

[링크 복사]
2021-2-7 14:15:08에 게시됨 | | | |
EF Core Series 2는 OnModelCreating을 캡슐화하고, 반사를 이용한 인덱스 생성 등 다양한 기능을 제공합니다
https://www.itsvse.com/thread-9392-1-1.html

섀도우 속성은 .NET 엔티티 클래스에는 정의되지 않았지만 EF 코어 모델에서 해당 엔티티 유형에 대해 정의된 속성입니다. 이 속성들의 값과 상태는 오로지 변경 추적기에서만 유지됩니다. 음영 속성은 데이터베이스 내 데이터가 매핑된 엔티티 타입에 노출되어서는 안 될 때 유용합니다.
Entity Framework 코어는 EF 6.x에는 존재하지 않는 새로운 유형의 속성인 "그림자(shadow)" 속성을 도입합니다.

그림자 속성은 없어요. .NET 엔티티 클래스들. 대신 엔터티 데이터 모델에서 특정 엔터티 유형에 맞게 설정할 수 있습니다. 컨텍스트 클래스의 OnModelCreating() 메서드에서 구성할 수 있습니다.

다음 도표는 그림자 속성을 보여줍니다.



위 이미지에서 보듯이, 그림자 속성은 당신의 엔티티 클래스에 속하지 않습니다. 따라서 다른 속성에 접근할 때는 접근할 수 없습니다. 음영 속성은 엔터티 데이터 모델을 구축할 때 엔티티 유형에 대해서만 설정할 수 있으며, 이들은 데이터베이스 컬럼에도 매핑됩니다. 섀도우 속성의 값과 상태는 변경 추적기에서만 유지됩니다.

그림자 속성의 실질적인 측면을 이해해 봅시다. 예를 들어, 데이터베이스 테이블에서 각 레코드의 생성 및 업데이트 날짜를 유지해야 한다고 가정해 봅시다. EF 코어에서 엔터티의 생성 및 수정 날짜를 설정하는 방법을 배웠는데, 엔터티 클래스에서 CreatedDate와 UpdatedDate 속성을 정의했습니다. 여기서는 엔티티 클래스에 섀도우 속성을 포함하는 대신 섀도우 속성을 사용하여 같은 결과를 얻는 방법을 살펴보겠습니다.

다음 학생 엔티티 수업을 고려해 보세요.

위의 학생 반CreatedDate와 UpdatedDate 속성은 포함되어 있지 않습니다생성되거나 업데이트된 시점을 유지하기 위해서입니다. 학생 엔티티에서 섀도우 속성으로 설정합니다.

그림자 속성 정의

Fluent API를 사용하는 엔터티 타입에 대해 그림자 속성을 정의하려면 OnModelCreating() 메서드를 사용할 수 있습니다.

다음 구성은 학생 엔티티에 대해 두 가지 음영 처리된 속성인 CreatedDate와 UpdatedDate를 구성합니다.


보시다시피, Property() 메서드는 그림자 속성을 구성하는 데 사용됩니다. 그림자 속성의 이름은 문자열로, 타입은 일반 매개변수로 지정합니다. Property() 메서드에서 지정한 이름이 기존 속성의 이름과 일치하면, EF Core는 새로운 섀도우 속성을 도입하는 대신 그 기존 속성을 섀도우 속성으로 구성합니다.

데이터베이스 내 섀도우 속성

섀도우 속성이 정의되면, 섀도우 속성이 해당 데이터베이스 컬럼에 매핑되기 때문에 데이터베이스 스키마를 업데이트해야 합니다.

이를 위해 Visual Studio의 Package Manager 콘솔에서 다음 명령어를 사용하여 데이터베이스 마이그레이션을 추가하세요.


학생 테이블은 이제 아래에 보이는 대로 SQL Server에서 CreatedDate와 UpdatedDate 두 개의 열을 포함하게 됩니다.



따라서 Student 클래스에 이 속성들을 포함하지 않고 그림자 속성으로 설정하더라도, 데이터베이스에는 해당 열들이 존재합니다.

그림자 특성 접근

EntityEntry에서 Property() 메서드를 사용해 섀도우 속성의 값을 얻거나 설정할 수 있습니다. 다음 코드는 섀도우 속성의 값을 접근합니다.

하지만 저희 시나리오에서는 각 엔티티 객체에서 수동으로 설정하지 않아도 되도록 SaveChanges() 메서드에서 이 그림자 속성으로 값을 자동으로 설정하고 싶습니다. 아래와 같이 컨텍스트 클래스에서 SaveChanges() 메서드를 덮어쓰세요.

이 기능은 CreatedDate와 UpdatedDate 섀도우 속성의 값을 자동으로 설정합니다.

이제 다음 코드를 실행하고 데이터베이스 내 기록을 확인하세요.


위 코드는 학생 생성일자와 업데이트일자에 다음 기록들을 삽입합니다.



따라서 섀도우 속성을 구성함으로써 엔터티 클래스에 포함할 필요가 없습니다.

모든 엔티티에 대해 섀도우 속성을 설정하세요

모든 엔티티에 대해 그림자 속성을 한꺼번에 수동으로 설정하는 대신, 직접 설정할 수 있습니다.

예를 들어, 다음 이미지에서 보듯이 CreatedDate와 UpdatedDate의 모든 엔티티를 마지막으로 구성할 수 있습니다.


언제 그림자 속성을 사용해야 하나요?

그림자 속성은 두 가지 상황에서 사용할 수 있습니다:

위에서 논의한 상황처럼 매핑된 엔티티에 데이터베이스 컬럼을 노출하고 싶지 않을 때,
외래키 속성을 노출하고 싶지 않고 내비게이션 속성만 관계 관리에 사용하고 싶을 때, 외래키 속성은 섀도우 속성이며 데이터베이스 열에 매핑되지만, 엔터티의 속성으로는 노출되지 않습니다. (EF Core에서는 엔티티 클래스에 외래 키 속성을 정의하지 않으면, 자동으로 이 속성에 대한 섀도우 속성을 생성합니다.) 외래키 속성을 수동으로 설정할 필요는 없습니다. )


리소스:

하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.




이전의:MySQL은 쿼리 결과를 파일로 내보냅니다
다음:ASP.NET ViewComponent 사용법 핵심 튜토리얼
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com