2016-05-12 9 views
0

Hier sind vier verschiedene Ansätze zum Definieren einer Entity-Klasse in Entity Framework. Kann mir jemand sagen, was ist der Unterschied in der Art, wie jeder Ansatz funktioniert, und auch, welche dieser Ansätze zu verwenden?Entity Framework-Eigenschaften wie funktioniert es

Kann ich bitte für eine gute Erklärung der Unterschiede bitten?

Sind die Unterschiede zu Lazy Loading vs. Eager loading?

Was ist besser und warum?

+0

Meiner Meinung nach ist Approach 3 gut. Sie können eine bessere Erklärung hier finden http://weblogs.asp.net/dotnetstories/lazy-loading-eager-loading-explicit-loading-in-entity-framework-4 – Venky

+0

Lesen Sie die Dokumentation: [Beziehungen und Navigationseigenschaften] (https : //msdn.microsoft.com/en-us/data/jj713564.aspx). – CodeCaster

Antwort

1

Hier ist, wie es aussehen soll:

public class User 
{ 
    public int Id { get; set; } 

    public int AddressId { get; set; } 

    public virtual Address Address { get; set; }  
} 


Erläuterungen:

  1. Wir müssen unsere Navigationseigenschaften wie virtual markieren EF verzögertes Laden zur Laufzeit zu ermöglichen. EF erstellt ein Benutzerproxyobjekt, das von Ihrer Benutzerklasse erbt und die Adresse als virtuell markiert, sodass EF diese Eigenschaft überschreiben und einen verzögerten Ladeunterstützungscode hinzufügen kann.

  2. Wenn Sie eine AddressId als FK für die Adressnavigationseigenschaft haben, wird Ihre User-Address-Zuordnung im Wesentlichen in eine "Foreign Key Association" konvertiert. Diese Art von Assoziationen wird bevorzugt, da sie einfacher zu handhaben sind, wenn es um Updates und Modifikationen geht.

  3. Sofern Sie keine Navigationseigenschaft in Form von Objektgruppen (z. B. IList<Address>) haben, müssen Sie sie nicht in Ihrem Konstruktor initialisieren. EF erledigt das automatisch für Sie, wenn Sie sie in Ihre Abfragen aufnehmen.

+0

1. _Wenn Sie das Lazy Loading verwenden möchten. 2. False, EF funktioniert ohne Fremdschlüsseleigenschaften einwandfrei. 3. Sie benötigen _Need_ nicht, um die Navigationseigenschaften des Sammlertyps zu initialisieren. – CodeCaster

+0

Nr. 1: Sie möchten immer Lazy Loading verwenden. Das Objekt sollte das erlauben - das benutzende Programm kann dies dann ausschalten und eifriges Laden verwenden. – TomTom

+0

1. Zustimmen. Du willst das, weil du dich immer noch dafür entscheiden kannst, deine Assoziation abzuholen. –