2017-03-14 5 views
1

두 개의 클래스 (테이블 - 코드 첫 번째 mvc5 사용) 사용자를 얻으려고하면 사용자 회사에 EF6이 제공되지 않습니다. 왜 그럴까요?Entity Framework에서 연결 테이블을 가져 오지 못함

모델 :

public class TblUser 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public bool Gender { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 

    public TblCompany TblCompany { get; set; } 
} 

    public class TblCompany 
{ 
    public int Id { get; set; } 
    public string CompanyName { get; set; } 
    public string Email { get; set; } 

    public List<TblUser> TblUsers { get; set; } 
} 

상황 :

public class DBContext : DbContext 
{ 
    public DbSet<TblCompany> TblCompanies { get; set; } 
    public DbSet<TblUser> TblUsers { get; set; } 
} 

서비스 :

 private DBContext db = new DBContext(); 
     public TblUser GetUserById(int id, bool showHidden = false) 
    { 

     return db.TblUsers.FirstOrDefault(x => x.Id == id && (!x.isDeleted || showHidden)); 
    } 

작업 :

public class SupplierHomeController : Controller 
{ 
    // GET: Supplier/SupplierHome 
    public ActionResult Index() 
    { 
     UserService _srvUser = new UserService(); 

     //User info will be come from Session in the future 
     //The User whose id is 1 is only for testing. 
     TblUser u = _srvUser.GetUserById(1); 

     //After that line, users's company is null! :( 
     //However there is a company linked to the user. 

     SupplierDashboardViewModel model = new SupplierDashboardViewModel(); 
     model.TblUser = u; 
     return View(model); 
    } 
} 

데이터베이스에서 사용자를 얻으려고하면 회사 정보가 null로만 표시됩니다. 나 진짜 혼란 스럽다.

답변

0

관련 엔터티를 명시 적으로로드해야합니다. 이것은 Include() 방법으로 수행됩니다

public TblUser GetUserById(int id, bool showHidden = false) 
{ 
    return db.TblUsers 
     .Include(u => u.TblCompany) 
     .FirstOrDefault(x => x.Id == id && (!x.isDeleted || showHidden)); 
} 

더 많은 정보 here합니다.

+0

을 사용하여 달성이 LINK .Eager로드에 대한 자세한에 대한 열망 -로드를 읽어하시기 바랍니다에 대한 열망 로딩을 사용한다! 고맙습니다. 그러나 이전 프로젝트에서 나는 전체 Entity를 자동으로 가져올 수있었습니다. 이 프로 시저에서 '포함'을 사용해야하는 이유는 무엇입니까? –

+0

@ Contat.Configuration.LazyLoadingEnabled = false;를 사용하여 컨텍스트 클래스에서 느린 로딩을 false로 설정 한 경우, 이전 프로젝트의 @ PolatFevziDündar가 좋을 수도 있습니다. – Curiousdev

+1

Ok. 이제 이해가된다. 감사!! –

0

당신은 Include() 방법이 작동

public TblUser GetUserById(int id, bool showHidden = false) 
    { 

    return db.TblUsers.Include(s => s.TblCompany).FirstOrDefault(x => x.Id == id && (!x.isDeleted || showHidden)); 
    }