Entity Framework 4 Single () vs. First () 및 FirstOrDefault ()
단일 항목을 쿼리하는 다양한 방법과 각 항목을 사용하는 시간을 비교하는 데 어려움을 겪고 있습니다.
누구 든지이 모든 것을 비교하는 링크가 있거나 왜 서로를 사용하는지에 대한 간단한 설명이 있습니까? 아직 모르는 연산자가 더 있습니까?
감사합니다.
다음은 다양한 방법에 대한 개요입니다.
Find ()-기본 키로 항목을 가져 오려는 경우 항목을 찾을 수 없으면 null을 반환합니다. 데이터베이스로 가기 전에 컨텍스트를 살펴볼 것입니다 (주석에서 Yaron이 지적한 바와 같이) 동일한 컨텍스트가 살아있는 동안 동일한 엔티티를 여러 번 가져와야하는 경우 중요한 효율성 요소가 될 수 있습니다.
Single ()-쿼리에서 정확히 하나의 항목이 반환 될 것으로 예상하는 경우 쿼리가 정확히 하나의 항목을 반환하지 않으면 예외가 발생합니다.
SingleOrDefault ()-쿼리에서 0 개 또는 1 개의 항목이 반환 될 것으로 예상되는 경우 (예 : 주어진 키가있는 항목이 있는지 확실하지 않은 경우) 쿼리가 0 개 또는 하나의 항목을 반환하지 않으면 예외가 발생합니다.
First ()-쿼리에서 하나 이상의 항목이 반환 될 것으로 예상하지만 코드의 첫 번째 항목에만 액세스하려는 경우 (여기서는 쿼리에서 순서가 중요 할 수 있음) 쿼리가 하나 이상의 항목을 반환하지 않으면 예외가 발생합니다.
FirstOrDefault ()-쿼리에서 0 개 이상의 항목이 반환 될 것으로 예상하지만 코드의 첫 번째 항목에만 액세스하려는 경우 (예 : 주어진 키가있는 항목이 있는지 확실하지 않은 경우)
나는 항상 사용하는 경향이 있습니다 FirstOrDefault
. 실제로 성능에 까다롭기를 원한다면 FirstOrDefault
EF에서 사용해야합니다 . 커버 아래에서 SingleOrDefault
쿼리에서 top (2)을 사용하므로 기준과 일치하는 두 번째 행이 있는지 확인해야하며 그렇지 않은 경우 예외가 발생합니다. 기본적으로 SingleOrDefault
쿼리에서 1 개 이상의 레코드를 반환하면 예외를 throw하려고합니다.
정말 간단 Single
합니다. 단일 항목을 반환하고 하나 이상의 항목이 없으면 예외를 throw합니다. First
첫 번째 항목을 반환하거나 항목이 없으면 던집니다. FirstOrDefault
항목이 없을 때 첫 번째 항목을 반환하거나 기본값 ( null
주어진 유형이 참조 유형 인 경우) 을 반환합니다 .
이것이 API의 동작입니다. 그러나 기본 구현에는 다른 동작이있을 수 있습니다. Entity Framework가이를 준수하는 동안 LLBLGen과 같은 O / RM도 null
호출 할 때 반환 될 수 있습니다 First
. 이는 매우 이상한 일입니다. 이것은 디자이너 IMO의 매우 이상한 결정이었습니다.
네 가지 방법은 각각 그 자리를 차지합니다. 실제로 두 가지 다른 작업 만 있습니다.
- 첫 번째-여러 항목이 포함 된 결과 집합이 필요하면 해당 집합의 첫 번째 항목을 제공하십시오.
- 단일-단일 결과를 기대하면 해당 항목을 알려주세요.
xxxxOrDefault () 버전은 "빈 결과 세트를 예외적 인 상황으로 생각하고 싶지 않다"고 덧붙입니다.
다른 한편으로, 이러한 방법을 다음과 같은 핵심 논리로 나눌 수 있습니다.
- 메소드는 데이터베이스를 직접 쿼리합니다 : Single (), SingleOrDefault (), First (), FirstOrDefault ()
- 방법도 데이터베이스에 대해 쿼리를 실행하기 전에 캐시에서 검색을 수행합니다 : 찾기 ()
일부 성능 세부 정보, 특히 두 번째 경우는 다음을 참조하십시오. https://msdn.microsoft.com/en-us/data/hh949853.aspx?f=255&MSPPError=-2147217396#3
또한 첫 번째 그룹에서는 복잡한 쿼리를 정의 할 수 있지만 Find () 메서드를 사용하면 검색을위한 엔터티 키만 제공 할 수 있습니다.
Single () 및 SingleOrDefault () 는 일반적으로 ID와 같은 고유 식별자에 사용되는 반면 First () 또는 FirstOrDefault () 는 일반적으로 여러 결과를 가질 수 있지만 "Top 1" 만 원하는 쿼리에는 사용됩니다 .
결과가 반환되지 않으면 Single () 또는 First () 에서 예외가 발생하고 SingleOrDefault () 및 FirstOrDefault () 가 예외를 포착하여 null 또는 default (ResultDataType)을 반환합니다.
참고 URL : https://stackoverflow.com/questions/3485317/entity-framework-4-single-vs-first-vs-firstordefault
'Programming' 카테고리의 다른 글
Python의 기능과 같은 sprintf (0) | 2020.07.28 |
---|---|
Android에서 HTTPClient를 사용하여 JSON으로 POST 요청을 보내는 방법은 무엇입니까? (0) | 2020.07.28 |
메모장에서 파이썬 파일을 실행하는 방법 ++? (0) | 2020.07.28 |
레일즈 : redirect_to : : error, 그러나 flash [: error] 비어 있음 (0) | 2020.07.28 |
1970 년 이후 현재 타임 스탬프를 밀리 초 단위로 얻는 방법 (0) | 2020.07.28 |