저는 EntityFramework를 사용하는 새로운 프로젝트에 대한 코드 우선 모델을 선언했습니다.DbQuery.Include()의 오버로드는 어디에서 람다를 사용합니까?
public class BlogEntry
{
public long Id { get; set; }
public long AuthorId { get; set; }
public DateTime PublishedStamp { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public virtual User Author { get; set; }
}
public class User
{
public long Id { get; set; }
public string Email { get; set; }
// ...
}
class BlogDb : DbContext
{
public DbSet<BlogEntry> Entries { get; set; }
public DbSet<User> Users { get; set; }
}
지금 내가 최근 10 개 블로그 항목을 검색한다고 가정 :
var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();
문제는 지금 entry.Author
에 액세스하는 다른 데이터베이스 쿼리를 일으킬 것입니다. 모든 블로그 항목에 대해 이와 같은 별도의 쿼리를 원하지 않을 것입니다. 지금, 그것은 Include
의 목적이 바로이 경우이다 나의 이해는, 그래서 내가 말할 수 있습니다
var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();
그러나,이 방법은 존재하지 않는 것 같습니다.
var entries = new BlogDb().Entries.Include("Author").(...).ToList();
하지만 체크 컴파일 타임 아니에요 및 이름 변경 리팩토링에 의해 놓칠 수 있기 때문에이 성가신 :이 경우에만이 같은 Include(string)
이다. 분명히 람다 버전은 "올바른"접근법입니다.
그 방법은 어디로 갔습니까? EntityFramework에 더 이상 포함되지 않습니까?
는 (나 자신이를 달성하기 위해 당신이 할 필요가 없습니다. 난 그냥 내가 뭔가를 누락 여부를 알고 싶습니다, 확장 방법을 쓸 수 있다는 것을 알고있다.)
감사합니다! 호기심에서 벗어나 확장 메소드가 아닌 원래 메소드의 또 다른 오버로드가 아닌 이유는 무엇입니까? – Timwi
실제로 lol은 ADO.Net 팀에 대한 질문이 될 수 있습니다. –
LINQ 쿼리의 어느 곳에서나 사용할 수 있도록 IXL은의 확장 방법입니다. DbQuery 또는 그와 비슷한 경우에만 정의 된 경우 .Where, .OrderBy 등과 같은 다른 메서드를 사용하자 마자이 메서드의 반환 형식이 IQWable 이기 때문에 더 이상 메서드가 표시되지 않습니다. –