У меня проблемы с запуском запроса linq для соединения с EF 4.0. Ниже приведен код, лишенный всех ненужных утверждений, все еще воспроизводящих ошибку)
using (var threadRepo = new Repo<Thread>())
using (var postRepo = new Repo<Post>())
{
var query = threadRepo
.Join(postRepo, t => t.PostId, s => s.Id, (t, s) => 1);
var array = query.ToArray();
}
Repo - моя реализация шаблона репозитория, и метод соединения выглядит так:
public IEnumerable<TResult> Join<TInner, TKey, TResult>(
IEnumerable<TInner> inner,
Expression<Func<TEntity, TKey>> outerSelector,
Expression<Func<TInner, TKey>> innerSelector,
Expression<Func<TEntity, TInner, TResult>> result)
{
return _objectSet.Join(inner, outerSelector, innerSelector, result);
}
Я получаю ошибку
Unable to create a constant value of type 'Post'.
Only primitive types ('such as Int32, String, and Guid')
are supported in this context.
Тот же запрос работает в LinqPad для той же базы данных (хотя, конечно, там нет EF 4.0)
from t in Thread
join p in Post on t.PostId equals p.Id
select 1
Есть какие-нибудь подсказки, почему Linq дает мне это исключение?
Обновление
Исходя из предложенного ниже предложения, я попытался использовать общий текст данных для обоих репозиториев, используя единицу работы. Однако, похоже, это не решает проблему. Ниже приведен код, который я использовал
using (var uow = new UnitOfWork<CommunicationEntities>())
{
using (var threadRepo = new Repo<Thread>(uow))
using (var postRepo = new Repo<Post>(uow))
{
var query = threadRepo
.Join(postRepo, t => t.PostId, s => s.Id, (t, s) => 1);
var array = query.ToArray();
}
}
Это дает мне ту же ошибку, что и раньше.
Спасибо
Jaspreet