2013-07-31 3 views
5

Ich benutze EntityFramework zum ersten Mal und vielleicht ist diese Frage so einfach ... Ich habe Code erste Methode verwendet .. Ich habe eine Class Personnel, die wie folgt aussieht:Füllen von Fremdschlüsselobjekt in Entity Framework 4

public class Personnel 
{ 

    public string Id { set; get; } 
    public int Code { set; get; } 
    public string Name { set; get; } 
    public int Type { set; get; } 

    public JobTitle Title { set; get; } 
} 

und die Jobtitel Klasse:

public class JobTitle 
{ 
    public string Id { set; get; } 
    public int Number { set; get; } 
    public string Title { set; get; } 

    public List<Personnel> Personnels { set; get; } 

} 

die die letzte Eigenschaft in Personal Klasse in der Personaltabelle course..my Problem ein Fremdschlüssel ist, wenn ich alle personnels abrufen möchten (oder ein Personal) aus DB mit Lambda-Ausdruck. Das Fremdschlüsselobjekt ist null. Der Lambda-Ausdruck ist l ike unten:

Context.ContextInstance.Personnels.ToList(); 

und wenn ich den Ausdruck zu diesem ändern, ist das Fremdschlüsselobjekt nicht null mehr.

Context.ContextInstance.Personnels.Include("Title").ToList(); 

ist es der richtige Weg ?? .. Gibt es einen besseren Weg ?? .. Ich nahm an, dass EF wird das automatisch verstehen !!!! .. wenn es mehr als 1 FK dann muss ich Verwenden Sie für alle von ihnen? bitte hilf mir zu verstehen.

Dank

+0

mögliche Duplikate von [Lazy Loading standardmäßig in Entity Framework 4 deaktivieren] (http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

Antwort

5

Dies ist auf verzögertes Laden. Wenn Sie Context.ContextInstance.Personnels.ToList(); anrufen, wird dies alle Mitarbeiter holen, aber Titel wird nicht abgerufen, bis es instanziert wird, also machen Sie es virtuell, um es zu bekommen.

oder können Sie verzögertes Laden deaktivieren, indem

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { 
    this.Configuration.LazyLoadingEnabled = false; 
} 

Dadurch wird alle zugehörigen Daten aus dem Kontext erhalten. Die Verwendung von "include" wird bei Bedarf geladen, wenn Sie Eigenschaften angeben, die Sie abfragen möchten.

Mit dem virtuellen Schlüsselwort kann die Laufzeitumgebung des Entity Framework dynamische Proxies für Ihre Entitätsklassen und ihre Eigenschaften erstellen und dadurch das Lazy Loading unterstützen. Ohne virtuelles Lazy Loading wird nicht unterstützt, und Sie erhalten null für die Collection-Eigenschaften.