2013-07-10 3 views
0

mvc에서 Dbset/Dbcontext를 사용할 때 sql을 사용하여 어떤 시점에서 테이블이 쿼리됩니까? 그리고 어떤 시점에서 Linq 문이 쿼리하는 List에로드 된 테이블이 있습니까?linq 전에 또는 linq 후에 Dbset/Dbcontext 목록이로드되었습니다

내가

public class MRN : DbContext 
{ 
    public MRN() 
     : base("DefaultConnection") 
    { 
    } 
    public DbSet<message> MRNS { get; set; } 
} 
[Table("MRN")] 
public class message 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string From { get; set; } 
} 

내 컨트롤러와 같은 모델이되어 있다고 가정하자

public class MRNController : Controller 
    { 
    private MRN mrn = new MRN(); // Is the linq list loaded here? 
    public ActionResult Someaction(){........ 
    ......} 

액션

같은

public ActionResult somelinq(int id) 
{ 
var k = mrn.MRNS.Find(id); //Is the private variable **mrn** already loaded here or does it loads during the linq statement or does linq queries actual table itself? 
} 

누군가가 SQL 테이블에 관해서로드에 정교한 즉, 실제 SQL 쿼리는 어떤 단계에서 수행됩니까?

답변

3

IQueryable을 구체화하자마자 검색어가 실행됩니다. 예를 들어 .First/Single(OrDefault)을 호출 할 때 .ToList() 또는 foreach을 호출 할 수 있습니다.

+0

그래서 비공개 변수를 선언하면 비어 있습니까? –

+0

글쎄, 그건 완전히 다른 질문이지만,'DbContext'가 초기화 되 자마자 데이터베이스에 접근하는지 여부를 뜻한다면 : no. 당신이 보인 코드에서,'.Find()'에서만 데이터베이스가 적중 될 것입니다. – CodeCaster

+0

덕분에 많은 일이 명확 해졌습니다. –