2012-04-13 1 views
1

У меня возникли проблемы с объединением в EF, используя мой сервисный уровень. Всякий раз, когда я пытаюсь сделать присоединиться, я получаю следующее сообщение об ошибке:Entity Framework 4.3, используя соединения

«Указанного выражения LINQ содержит ссылки на запросы, которые связаны с различными контекстами»

Я потратил много времени, пытаясь понять это. Большинство статей, которые я видел, связаны с объединением наборов сущностей из разных контекстов. Однако это происходит со мной, используя ту же БД. Что я делаю не так?

Пример кода:

public virtual IList<ProductVariantAttribute> GetProductVariantAttributes(int ProductID) 
    { 
     var query = from pva in _productVariantAttributeRepository.Table 
        join b in _productAttributeRepository.Table on pva.ProductAttributeID equals b.ProductAttributeID 
        where pva.ProductID == ProductID 
        select pva; 

     var productVariantAttributes = query.ToList(); 
     return productVariantAttributes; 
    } 
+0

В статьях речь идет о случаях контекста, скорее всего, и поскольку у вас, кажется, есть шаблон репозитория, его каждый репозиторий имеет свой собственный экземпляр контекста. – meandmycode

ответ

1

Это не имеет ничего общего с базами данных. Он имеет все, что связано с экземплярами ObjectContext.

Вы ссылаетесь на два разных репозитория в своем запросе. Я думаю, каждый из них обертывает EntityContext. Это вызовет это сообщение.

Это также анти-шаблон. Я рекомендую вам открыть ровно один EntityContext для HTTP-запроса или для вызова WCF или независимо от вашего подразделения.

+1

Спасибо, я регистрирую контекстный интерфейс с помощью DI. Я забыл добавить атрибут .InstancePerHttpRequest() в регистраторе зависимостей – Dereck