2011-02-09 17 views
17

EF ile Code-First yaklaşımını kullanıyorum ve IDbSet'i DbSet yerine kullanmak istedim, böylece Birim Testleri alay ile yapabildim. Benim sorunum gereken yerde istekli yükleme için Include() yöntemini kullanıyorum ama Include() IDbSet üzerinden açık değil. Include() öğesini göstermek için bir uzantı yöntemi kullanarak örnek bir kod gördüm, ancak benim için çalışmıyor gibi görünüyor; Bu örnekteki objectQuery nesnesi her zaman boştur. Lütfen bunu nasıl düzelteceğimi bildirin.IDbSet ve Exposing Yöntemini Uzatma Metoduyla ekle

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

cevap

28

CTP5 kullanıyorsanız, bu uzantıyı yazmanız gerekmez. IQueryable için CTP5 providesInclude uzantısı. Sen EntityFramework.dll (CTP5) referans ve eklemek zorunda:

using System.Data.Entity; 

senin ObjectQuery için kaynağını dönüştürmektedir çünkü sürümünüz muhtemelen çalışmıyor ama büyük olasılıkla tip DbQuery olacaktır.

+0

İlk başta ne söylediğini anlamadım. Ama sonra ben sadece benim DbContext (session.cs) oluşturduğunuz dosyada değil, Include() kullanmak için linq ifademi (services class) yazdığım dosya üzerinde kullanma ifadesine sahip olduğumu fark ettim. Teşekkür ederim!!! – enamrik

+1

alas, birim test edilebilir EF için arayış hedefine ulaştı. TEŞEKKÜRLER. –

0

Yukarıdaki statik sınıfı içeren using belirtimlerine sahip olduğunuzdan emin olun. Kodunuzun basit kopyalanması/yapıştırılması, doğru isim alanına başvururken içerme yöntemlerini göstererek IDbSet'e neden olur.

İlgili konular