Множество включва използване на Entity Framework и Repository Pattern

Използвам Entity Framework и Repository Pattern за целия си достъп до данни, когато използвам навигация в таблици, забелязах, че се изпълняват 2 заявки, когато получих първия обект и препратка към поле в навигационен обект. Тъй като имам много релации в базата данни, използването на тази техника за моите навигационни свойства може да причини допълнителни разходи за производителност.

Разгледах метода Include(string tableName) и това ще работи много добре (ако не използвах общ RP), но това отнема само едно име на таблица. Успях да репликирам това в моя модел на хранилище за едно включване, като промених моя where от classs на EntityObject, но как мога да имам множество включвания в една заявка, използвайки модел на хранилище??

ето моят код:

public class GenericRepository<T> : IRepository<T> where T : EntityObject, new()
{
    private Entities _Context;
    private ObjectSet<T> _ObjectSet;

    public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, string include)
    {
        // This works OK
        return this._ObjectSet.Include(include).Where(predicate);
    }

    public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, param string[] include)
    {
        // This will not work but is what I am trying to do
        return this._ObjectSet.Include(include).Where(predicate);
    }
}

person Andy Clark    schedule 27.09.2012    source източник


Отговори (1)


Можете да свържете вашите включвания:

public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate, param string[] include)
{
    IQueryable<T> query = this._ObjectSet;
    foreach(string inc in include)
    {
       query = query.Include(inc);
    }

    return query.Where(predicate);
}
person heavyd    schedule 27.09.2012
comment
Това не е компилиране, query = query.Include(inc) IQueryable‹T› не съдържа метод, наречен Include. - person Andy Clark; 28.09.2012
comment
Може да се наложи да добавите using System.Data.Entity - person heavyd; 28.09.2012
comment
ObjectQuery<T> също има дефиниран метод, така че можете да замените IQueryable<T> с него. Каква версия на EF използвате? - person heavyd; 28.09.2012
comment
Току-що осъзнах, че го няма, защото използвам по-стара версия на Entity Framework и System.Data.Entity. Актуализирах версиите и вече работи. - person Andy Clark; 28.09.2012
comment
Коя версия е старата версия и до каква версия надстроихте? - person Mukus; 18.11.2013