2017-03-14 3 views
1

Ich habe einfach zwei Klassen (auch Tabellen - mit Code-zuerst mvc5) Wenn ich versuche, Benutzer zu bekommen, kommt die Firma des Benutzers nicht mit EF6. Warum ist das?Entity Framework wird nicht verknüpft Tabelle

Modell:

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; } 
} 

Kontext:

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

Service:

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

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

Aktion:

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); 
    } 
} 

Wenn ich versuche, einen Benutzer aus der Datenbank abzurufen, wird die Firmeninfo nur auf Null gesetzt. Ich bin so verwirrt.

Antwort

0

Sie müssen die zugehörigen Entitäten explizit laden. Dies wird mit der Include() Methode durchgeführt:

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

Mehr Infos here.

+0

Das funktioniert lesen! Vielen Dank. Aber in meinen älteren Projekten konnte ich automatisch ganze Entitäten bekommen. In diesem Verfahren muss ich 'include' warum verwenden? –

+0

@ PolatFevziDündar in Ihrem älteren Projekt möglicherweise haben Sie Lazy loading gemacht ist falsch in Ihrer Kontext-Klasse mit 'context.Configuration.LazyLoadingEnabled = false;' – Curiousdev

+1

Ok. Ich verstehe es jetzt. Vielen Dank!! –

0

sollten Sie Eager Laden für diese Verwendung bitte über Eager-Loading mehr auf diesem LINK .Eager Laden erfolgte mittels der Include() Methode

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

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