codememo

엔티티 프레임워크에서의 ICollection과 리스트

tipmemo 2023. 4. 23. 10:28
반응형

엔티티 프레임워크에서의 ICollection리스트

몇 개의 웹캐스트만 보고 몇 개의 엔티티 프레임워크 애플리케이션을 설계했습니다.나는 정말 그렇게 많은 자료를 읽지 않아서 지금 그것 때문에 고통받고 있는 것 같아.

사용하고 있습니다.List<T>정말 효과가 있었어요

제가 몇 가지 문서를 읽었는데, 제가 이 문서를 사용했어야 한다고 쓰여있었어요.ICollection<T>이걸로 바꿨는데 모델 콘텍스트도 안 바뀌었어요.둘 다List<T>그리고.ICollection<T>상속하다IEnumerable<T>그게 EF에 실제로 필요한 건가요?

그러나 이러한 경우 EF 문서에는 다음과 같이 기술되어 있지 않은 이유는 무엇입니까?IEnumerable<T>대신ICollection<T>?

엔티티 프레임워크는ICollection<T>그 이유는 이 시스템이 이 모든 것을Add조작, 이 조작의 일부에 포함되지 않은 조작IEnumerable<T>인터페이스입니다.

, 사용하고 있던 것에 주의해 주세요.ICollection<T>, 당신은 단지 그것을 공개하고 있었을 뿐입니다.List<T>실행. List<T>가지고 오다IList<T>,ICollection<T>,그리고.IEnumerable<T>.

변경 내용에 대해서는 인터페이스를 통해 노출하는 것이 좋습니다.List<T>일해.인터페이스는 계약을 정의하지만 구현은 정의하지 않습니다.구현이 변경될 수 있습니다.경우에 따라서는 구현이HashSet<T>예를 들어, (이는 엔티티 프레임워크에 그치지 않고 사용할 수 있는 사고방식입니다.오브젝트 지향의 좋은 프랙티스는 실장이 아니라 인터페이스를 향해 프로그래밍하는 것입니다.구현은 변경될 수 있으며 앞으로도 변경될 것입니다.)

이들은 Linkq를 사용할 때 Entity Framework가 수행하는 매직쿼리에 대해 이해하기 쉬운 추상화를 제공하기 위해 이 인터페이스를 선택했습니다.

인터페이스의 차이를 다음에 나타냅니다.

  • IEnumerable<T>읽기 전용입니다.
  • 아이템을 추가 및 삭제할 수 있습니다.ICollection<T>
  • (인덱스로) 에 랜덤으로 액세스 할 수 있습니다.List<T>

그 중에서ICollection그리고.IEnumerable엔티티 쿼리 및 추가/제거는 DB에서 수행할 수 있는 작업이므로 데이터베이스 작업에 잘 매핑됩니다.

반복할 기존 쿼리 결과가 있어야 하거나 각 임의 액세스가 데이터베이스를 다시 쿼리해야 하므로 색인별 임의 액세스도 매핑되지 않습니다.또한 인덱스는 무엇에 매핑됩니까?행 번호?행 번호 쿼리는 그다지 많지 않으며 더 큰 쿼리를 작성하는 데 전혀 유용하지 않습니다.그래서 그들은 단순히 그것을 지원하지 않는다.

ICollection<T>는 지원되며 데이터 조회와 변경을 모두 수행할 수 있으므로 이를 사용하십시오.

★★List<T>EF 1로 하다하지만 이는 쿼리 체인의 끝에 있는 것이지, 처음은 아닙니다. 당신의 것ICollection<T> 번들을 의 SQL만 하는 것이 해집니다.List<T>사용하는 Linq의 각 레벨에 대해 쿼리를 실행하는 것이 아니라 마지막입니다.

ICollection은 IEnumerable과 달리 실제로 컬렉션에 항목을 추가할 수 있지만 IEnumerable에서는 추가할 수 없습니다.예를 들어 POC 클래스에서 컬렉션을 추가할 수 있는 경우 ICollection을 사용합니다.ICollection을 가상으로 만들어 부하가 느리더라도 이점을 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/7655845/icollectiont-vs-listt-in-entity-framework

반응형