2009-05-14 3 views
2

linq을 사용하여 엔티티 프레임 워크를 사용하여 SQL에 질의하고 Person 객체를 가지고 있지만 그 객체의 두 속성 만 필요하면 메모리에있는 내용이로드됩니다. 전체 대상?엔티티 - Linq to Sql 엔티티의 일부만로드하십시오.

예 : 이름, 나이, 주소, 국가, 언어 ... 난 단지 속성 이름과 나이를 사용해야

:

나는 특성을 가진 엔티티 사람을 얻었다. 따라서 주소, 국가 및 기타 자산을로드 할 필요가 없습니다 ... 메모리에 저장 될 내용과 SQL에 요청할 쿼리의 유형은 무엇입니까?

내 LINQ 쿼리 인 경우 :

public IQueryable<Person> FindAllPersons() 
{ 
    return from person in db.Persons 
      select person; 
} 

그리고 나중에 코드에서 난 단지 목록에있는 각 사람의 이름과 나이 속성을 호출.

답변

2

필요한 필드 만 쿼리 할 수 ​​있습니다. 당신은 LINQ와 함께 전체 사람 개체를 선택하면 해당 개체에 액세스 할 때 지금처럼

,

public IQueryable<Person> FindAllPersons() 
{ 
    return from person in db.Persons 
      select new Person(){Name = person.Name, Age = person.Age}; 
} 
+2

나는 그것을 시도하고 난 다음 NotSupportedException이 얻을 : "엔티티 또는 복합 형 'CompleteKitchenModel.Contact은'엔티티 질의에 LINQ으로 구성 할 수 없습니다." 여기에 질문을 게시했습니다 : http://stackoverflow.com/questions/2011100/loading-partial-entities-with-linq-to-entities – Shimmy

2

, 다음, 전체 사람이 메모리에로드됩니다. 특정 필드 만 선택하려면 선택 기준을 세분화해야합니다. 예를 들면 다음과 같습니다.

var persons = from p in db.Persons select new { p.Name, p.Age }; 
2

EF 또는 Linq2SQL 중 어느 것을 사용 할지를 지정할 수도 있습니다. 그러나 실제로 SQL을 사용하고있는 SQL에 따라 달라질 수 있습니다.

지정한 쿼리에서 데이터베이스 열에 연결된 모든 속성이 개체 참조로 채워집니다 (개체 참조가 아닌 한). 아마도 다른 속성에서 지연로드를 효과적으로 사용할 수 있지만 이는 담요 솔루션이 아니며 응용 프로그램의 다른 영역에서 생산성이 떨어질 수 있습니다. 결국 응용 프로그램이 매우 메모리에 민감해야만 객체를로드하는 것이 아니라면 나는 말할 것입니다.

단지 이름과 나이를로드 할 수 .. 대안으로

var list = db.Persons.Select(person => new Person() { Age = person.Age, Name = person.Name }); 
3

, 당신은 지연이 즉시로드되지 않게하려면 모든 열에 대해 true로로드 설정할 수 있습니다.

+0

저에게 예제 나 링크를 제공해 주시겠습니까? – Melursus

1

디자이너의 각 엔터티 열에 Delay Loaded 속성이 있습니다. 이 값을 true로 설정하면 (오류 값은 false) 속성의 즉석로드가 비활성화되고 코드에서 액세스 될 때만로드됩니다.

0
public IQueryable<Persons> GetApplicationRoleList() 
    { 
     return DBContext.Persons.AsQueryable(); 
    } 

)