EF Многие-ко-многим dbset.Include в DAL на GenericRepository - PullRequest
1 голос
/ 26 ноября 2011

Я не могу заставить QueryObjectGraph добавить дочерние таблицы INCLUDE, если от этого зависит моя жизнь ... чего мне не хватает?Застрявший на третий день в чем-то простом: - /

DAL:

public abstract class RepositoryBase<T> where T : class
{
    private MyLPL2Context dataContext;
    private readonly IDbSet<T> dbset;


    protected RepositoryBase(IDatabaseFactory databaseFactory)
    {
        DatabaseFactory = databaseFactory;
        dbset = DataContext.Set<T>();

        DataContext.Configuration.LazyLoadingEnabled = true;
    }

    protected IDatabaseFactory DatabaseFactory
    {
        get;
        private set;
    }

    protected MyLPL2Context DataContext
    {
        get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
    }

    public IQueryable<T> QueryObjectGraph(Expression<Func<T, bool>> filter, 
       params string[] children)
    {
        foreach (var child in children)
        {
            dbset.Include(child);
        }

        return dbset.Where(filter);
    }

... DAL репозитории

 public interface IBreed_TranslatedSqlRepository : ISqlRepository<Breed_Translated>
 {
 }

 public class Breed_TranslatedSqlRepository : RepositoryBase<Breed_Translated>, 
    IBreed_TranslatedSqlRepository
 {

    public Breed_TranslatedSqlRepository(IDatabaseFactory databaseFactory)
        : base(databaseFactory)
    {}

 }

BLL Репо:

 public IQueryable<Breed_Translated> 
    QueryObjectGraph(Expression<Func<Breed_Translated, bool>> filter, 
        params string[] children)
    {
        return _r.QueryObjectGraph(filter, children);
    }

Контроллер:

  var breeds1 = _breedTranslatedRepository
    .QueryObjectGraph(b => b.Culture == culture, new string[] { "AnimalType_Breed" })
    .ToList();

Я не могу добраться до Breed.AnimalType_Breed.AnimalTypeId ..Я могу развернуть до Breed.AnimalType_Breed, тогда intelisense ожидает выражение?

Подсказки, если есть, Таблицы БД: полужирный - это порода "многие ко многим", Breed_Translated, AnimalType_Breed , AnimalType, ...

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

AnimalBreed_Type представляет отношение «многие ко многим», поэтому свойство AnimalBreed_Type в сущности Breed_Translated равно collection !Тип коллекции не имеет свойств вашей таблицы.Вы должны использовать First или Single, чтобы получить один связанный объект из этой коллекции и проверить, что он AnimalTypeId.

0 голосов
/ 26 ноября 2011

Если вы посмотрите на Включить, он имеет тип возврата.Linq в основном функционален, поэтому он НЕ будет изменять какие-либо объекты, а будет возвращать новые.Вместо этого вам нужно сохранить этот новый объект.

Попробуйте:

var query = dbset.Where(filter);
foreach (var child in children)
{
    query = query.Include(child);
}

return query;

ДРУГОЕ ПРИМЕЧАНИЕ: Вы можете упростить это:

var breeds1 = _breedTranslatedRepository
    .QueryObjectGraph(b => b.Culture == culture, new string[] { "AnimalType_Breed" })
    .ToList();

До

var breeds1 = _breedTranslatedRepository
    .QueryObjectGraph(b => b.Culture == culture, "AnimalType_Breed")
    .ToList();

Когда ваш метод принимает строку params [] аргумент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...