2011-02-09 10 views
17

Sto utilizzando l'approccio Code-First con EF e volevo utilizzare IDbSet invece di DbSet in modo da poter eseguire il test delle unità con i mock. Il mio problema è che io uso il metodo Include() per il caricamento ansioso, se necessario, ma Include() non è esposto tramite IDbSet. Ho visto un codice di esempio utilizzando un metodo di estensione per mostrare Include() ma non sembra funzionare per me; l'oggetto objectQuery in questo esempio è sempre nullo. Per favore fatemi sapere come risolvere questo problema.IDbSet ed Exposing Include metodo tramite Extension Method

public static class IQueryableExtension 
{ 
    public static IQueryable<T> Include<T>(this IQueryable<T> source, string path) 
     where T : class 
    { 
     ObjectQuery<T> objectQuery = source as ObjectQuery<T>; 
     if (objectQuery != null) 
     { 
      return objectQuery.Include(path); 
     } 
     return source; 
    } 

    public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source, 
     System.Linq.Expressions.Expression<Func<T, TProperty>> path) 
     where T : class 
    { 
     ObjectQuery<T> objectQuery = source as ObjectQuery<T>; 
     if (objectQuery != null) 
     { 
      return source.Include(path); 
     } 
     return source; 
    } 
} 

risposta

28

Non è necessario scrivere tale estensione se si utilizza CTP5. CTP5 provides estensione Include per IQueryable. Bisogna fare riferimento EntityFramework.dll (CTP5) e aggiungere:

using System.Data.Entity; 

La versione probabilmente non funziona perché il vostro stanno convertendo sorgente per ObjectQuery ma sarà molto probabilmente di tipo DbQuery.

+0

All'inizio non ho capito quello che stavi dicendo. Ma poi mi sono reso conto che avevo bisogno di avere l'istruzione using sul file in cui stavo scrivendo la mia istruzione linq (classe services) per usare Include(), non solo sul file che ho creato il mio DbContext (session.cs). Grazie!!! – enamrik

+1

ahimè, la ricerca dell'unità EF verificabile ha raggiunto il suo obiettivo. GRAZIE. –

0

Assicurarsi di disporre delle proprietà using istruzioni che contengono la classe statica precedente. Semplice copia/incolla dei risultati del codice in IDbSet che espone i metodi di inclusione quando si fa riferimento allo spazio dei nomi corretto.

Problemi correlati