2014-05-09 6 views
1

일부 데이터를 반환하는 mvc4 서비스를 작성하고 있습니다. 테이블에서 ICollection을 반환하지 않도록하려면 어떻게해야합니까? 불필요한 과부하가 발생합니다. 이 예제에서 저는 단지 UserIdUsername을 피하고 UserInfos을 피하고 싶습니다.Return IQueryable ICollection 반환하지 마십시오

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string Username { get; set; } 

    public virtual ICollection<UserInfo> UserInfos { get; set; } 
} 

MVC4의 API

[HttpPost] 
    [Authorize(Roles = "administrator")] 
    public IQueryable GetUsers() 
    { 
     var items = _uow.Users.DbSet.Where(x => x.Username == "FirstUser"); 
     return items; 
    } 

답변

2

당신이 (dB 컨텍스트 Configuration.LazyLoadingEnabled = false;에서) 떨어져 있어야한다 EF, 게으른 로딩 모드 (실제 설정 기본)를 사용하는 경우. 이렇게하면 Include()를 사용하여 명시 적으로 묻지 않는 한 UserInfo가로드되지 않도록 할 수 있습니다.

UserInfo가로드되지 않도록하기 위해 IQueryable을 반환하면 안됩니다.

+0

답장을 보내 주셔서 감사합니다.하지만 Lazy Loading없이 _uow.Users.UserInfos.Add (new UserInfo())와 같은 테이블을 추가 할 수는 없습니다. IQueryable을 반환하지 않아야하는 이유는 무엇입니까? DbSet을 사용하여 자동으로 모든 것을로드합니까? –

+0

게으른 로딩에서 테이블을 추가하는 데 문제가있을 것이라고 생각하지 않습니다. (시도하지 않았으므로 잘못 될 수 있습니다) - 문제가 발생하면 어떤 오류 메시지가 나타 납니까? IQueryable 정보 - 죄송합니다. 나는 곧장 생각하지 않았습니다. 이 모습으로 IQueryable과 OData를 결합하는 것이 좋은 웹 API를 만들고 있습니다. –