람다 식과 함께 Entity Framework 4에 포함 사용


88

이 문제를 극복하는 방법에 대한 많은 기사를 보았습니다. 모두 CTP4와 관련이 있거나 자체 확장 방법을 추가합니다.

include 내부에 람다 식을 사용하는 "공식적인"EF4 포함 방법이 있습니까 (첫 번째 수준 관계와 두 번째 및 그 이상의 수준 모두에 대해) 아니면 결국 RTM에 포함되지 않았습니까?

하나가 있습니다. 지금 내 코드에서 람다 식을 사용하면 (# system.data.entity # system.data.linq 사용) 여전히 나에게 제공되므로 방법을 배우면 기쁩니다.

람다식이 대리자 형식이 아니기 때문에 '문자열'형식으로 변환 할 수 없습니다.

var customers = from c in
context.Customers.Include(c=>c.Phone)

1
아니요, 존재하지 않습니다 (CTP4 제외-말씀하신대로). 유형 안전성을 달성하기 위해 확장 메서드 / 열거 형을 사용합니다.
RPM1984 2010

나도 그렇게 했으므로 MS는 CTP4에 포함하고 RTM에서 제거 했습니까?
Dani

답변:


229

Entity Framework 4.1의 RTM 버전은 실제로 함수를 통해 람다로 즉시로드하기 위해 파일에 확장 메서드 를 포함 합니다. 프로젝트에 DLL을 포함하기 만하면 다음과 같은 코드를 작성할 수 있습니다.EntityFramework.dllInclude

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

System.Data.Entity 네임 스페이스 를 포함하려면 Import / Using 문을 추가해야 합니다. 그렇지 않으면 컴파일러가 확장 메서드를 찾을 수 없습니다. 예 :

using System.Data.Entity;

자세한 내용은이 ADO.NET 팀 블로그 문서를 참조하십시오.


1
다음 ADO.net 블로그에 링크가 여전히 관련이 있지만, 동일한 주제에 대한 EF6 참조 / 가이드는 로드 관련 엔티티가 그들이 사용했던 나는 블로그 대신 공주와 유니콘 예로 전환하려면 문서의 요구를 생각하고 포스트 어디에나.
Arkaine55 2015 년

1
감사합니다. System.Data.Entity를 사용하여 추가합니다. 그 일이 나.
adnan

팀 블로그 링크가 죽었습니다. 이것은 새로운 위치입니다
Nintynuts

89

이것이 질문에 암시되어 있지만 .Include와 함께 람다를 사용할 수없는 동일한 문제가있는 다른 사람에게는 다음이 있는지 확인하십시오.

using System.Data.Entity;

5

현재 RTM에서 Include with lambda expression에 대한 공식적인 지원은 없습니다. 나는 이것을 사용 하고 있습니다.

CTP4에 대해 이야기 할 때 Entity Framework 기능을 의미합니다. EF4보다 최신 API입니다. 주로 Code First 및 기타 몇 가지 개선 사항이 포함됩니다.


MS가이 기능을 언제 지원할 것인지 아십니까? 이러한 모든 확장 메서드는 큰 / 다단계 개체에 성능 문제가 있음을 이해합니다. 포함을 호출 할 때마다 반복해서 탐색해야하고 개체 "정의"트리가 일정하고 캐시 될 수 있지만 다음과 같은 해결책은 없습니다. 아직.
Dani

Entity Framework 기능은 현재 CTP5에 있습니다. RTM 버전은 2011 년 1 분기에 공개되어야한다고 생각합니다. 따라서 Include with lambda 표현식이 포함되기를 바라지 만 아직 구현을 확인하지 않았으므로 어떤 종류의 캐싱을 사용하는지 말할 수 없습니다.
Ladislav Mrnka 2010

31
이 대답은 EF 4.3.x에서 잘못되었습니다. 다른 대답은 맞습니다. 하나는 System.Data.Entity사용하여 람다 식으로 과부하를 가져와야합니다.
Eric J.

1
@EricJ : 네. 강력한 형식의 Include는 EF 4.1부터 사용할 수 있습니다.
Ladislav Mrnka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.