EF 4.0に対してjoin linqクエリを実行する際に問題があります。以下は、まだエラー)を再生、すべての不要なステートメントを剥奪コードは、あるEntity Framework 4.0で失敗したLinqを使用して結合
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();
}
レポは、リポジトリのパターンの私の実装であり、そしてこの方法は、このようになります参加:
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);
}
エラーI取得同じクエリが同じデータベースに対してLinqPadで働く
Unable to create a constant value of type 'Post'.
Only primitive types ('such as Int32, String, and Guid')
are supported in this context.
(offcourseものの、EF 4.0はそこではありません)
ですfrom t in Thread
join p in Post on t.PostId equals p.Id
select 1
Linqが私にこの例外を与えている理由についての手がかりはありますか?以下の提案に基づいて
更新
、Iは、作業の単位を使用してリポジトリの両方に共通のDataContextを使用してみました。しかし、それは問題を解決していないようです。以下は私が使用したコードです
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
'sparkRepo'は' postRepo'と同じですか? –
はい、申し訳ありません。私はタイプミスを修正しました。 – floatingfrisbee