2016-06-06 11 views
5

Ich verwende Klasseneigenschaften durch Reflexion in einigen Operationen, so dass bei Verwendung von DynamicProxy-Instanz bewirkt, dass die gesamte DB geladen wird. (700+ Klassen sind miteinander verwandt).Überprüfen Sie die Lazy Load-Eigenschaft in EF6 geladen

Ist es möglich, zu überprüfen, ob Lazy Load-Eigenschaft geladen ist oder nicht? Die Deaktivierung der dynamischen Proxy-Generierung (ProxyCreationEnabled = false) ist in meinem Fall nicht möglich.

Customer oCustomer = context.get(1); 

if(oCustomer.Location.HasLoaded) 
    do smt.. 

public class Customer 
{ 
    public decimal? Id {get; set;} 
    public virtual CustomerLocation Location{get; set;} 
} 

public class CustomerLocation 
{ 
    public decimal? Id {get; set;} 
    public string Detail {get; set;} 
} 

Antwort

4

Sieht aus wie Sie suchen für DbReferenceEntry<TEntity, TProperty>.IsLoaded oder DbReferenceEntry.IsLoaded Eigenschaft:

if (context.Entry(oCustomer).Reference(e => e.Location).IsLoaded) 

oder

if (context.Entry(oCustomer).Reference("Location").IsLoaded) 

Für Navigationseigenschaften Kollektionstyp, verwenden Sie einfach .Collection statt .Reference.

+1

Dank @Ivan Stoev, Als eine Notiz für die Zukunft, Es funktioniert, wenn der Objektstatus nicht getrennt ist. – hkutluay

+0

Gibt es eine Möglichkeit, es zu überprüfen, ohne den Kontext zu haben (zum Beispiel während der Validierung der Entität)? – bubi

+1

@bubi Ich würde nicht absolut unmöglich sagen, wäre aber ziemlich hart und muss mit EF Interna wählen. –