2016-06-13 2 views
0

Я использую Autofac для DI в своем проекте (веб-приложении). У меня есть выражение LINQ, которая соединяет 2 разных таблиц в одной и той же БД что-то вроде этого (все() является просто оболочкой над dbSet.AsQueryable())Различные контексты с InstancePerRequest с использованием Autofac

from repo1 in repository1.All() 
join repo2 in repository2.All() 
    on repo1.SomeField = repo2.SomeField 
..... 

Я регистрируя свои компоненты (repo1 и repo2) в контейнер-строитель с InstancePerRequest().

Когда я выполняю свой код, в коде LINQ он вызывает следующую ошибку: «Указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами».

Я думал, что dbContext является общим (по запросу) для компонентов, зарегистрированных через InstancePerRequest().

Мысли?

Спасибо!

+1

Как создается ваш dbContext? Зарегистрировано ли оно через autofac? Если да, то как он регистрируется? –

+0

Когда вы говорите, что это веб-приложение, какой тип вы имеете в виду? Это WebApi, WCF, MVC или что-то еще? Используете ли вы подходящую библиотеку интеграции autofac для своего типа приложения? –

+0

Вы не показываете свой конструктор репозитория. Если вы хотите, чтобы он работал правильно, вам необходимо зарегистрировать свой 'DbContext' с помощью PerRequest' и сделать ваши« репозитории », чтобы он был введен как параметр конструктора. Тогда это только сработает. –

ответ

1

Вы не показываете свой конструктор репозитория. Если вы хотите, чтобы он работал правильно, вам необходимо зарегистрировать свой DbContext с помощью PerRequest, а также сделать ваши «репозитории» для его ввода в качестве параметра конструктора. Тогда это только сработает. Существует неявное предположение о том, что зависимости зарегистрированных компонентов PerRequest должны быть созданы с одним и тем же жизненным циклом. По умолчанию все компоненты регистрируются на зависимости.

+0

Спасибо, Алексей. Я пропустил введенный DbContext в моем конструкторе репозитория. Теперь работа хорошая. –