EF 4.1 + Репозиторий + UnitOfWork + Удалить зависимость с EF - PullRequest
1 голос
/ 03 августа 2011

Я реализовал общий репозиторий, который зависит только от IUnitOfWork (в библиотеке Infrastructure.Repositories), а также не использовал ссылки на Entity Framework 4.1 dll. DbContext Entity Framework, обернутый EFUnitOfWork, который находится в другой библиотеке классов, называемой Infrastructure.EntityFramework. Однако я столкнулся с некоторыми трудностями с запросом Linq to Entity, которые могут заставить меня включить прямую зависимость с хранилищем и библиотекой EF 4.1.

В одном из моих репозиториев классов мне нужно использовать следующий запрос с объединением. Как я могу преодолеть использование DBContext в моем хранилище?

var result = from cc in ProjectXEFDbContext.CurrentContext().PurchaseOrderLineItemCollection
                     join bb in GetQuery() on cc.PurchaseOrderId equals bb.Id
                     where bb.Id == purchaseOrder.Id && cc.Total > 50
                     select cc;

1 Ответ

0 голосов
/ 05 августа 2011

Я сделал свои репозитории для показа IQuerables через DbContext. Обертка DbContext с UnitOfWork выглядит следующим образом

Моя база репозитория выглядит так

    /// <summary>
    /// Gets the query.
    /// </summary>
    /// <returns></returns>
    public IQueryable<TEntity> GetQuery()
    {
        return this.UnitOfWork.GetQuery<TEntity>();
    }

    /// <summary>
    /// Loads the type.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public IQueryable<T> LoadType<T>() where T : class
    {
        return this.UnitOfWork.GetQuery<T>();
    }

моя единица работы выполняется здесь

    /// <summary>
    /// Gets the query.
    /// </summary>
    /// <typeparam name="TEntity">The type of the entity.</typeparam>
    /// <returns></returns>
    public IQueryable<TEntity> GetQuery<TEntity>() where TEntity:class 
    {
        return this.DbContext.Set<TEntity>();
    }

Изменения в моем запросе следующие:

        var result = from cc in GetQuery()
                     join bb in LoadType<PurchaseOrderLineItem>() on cc.Id equals                      bb.PurchaseOrderId
                     where cc.Id == purchaseOrder.Id && bb.Total > 50
                     select bb;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...