2011-11-14 15 views
0

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

+0

'sparkRepo'は' postRepo'と同じですか? –

+0

はい、申し訳ありません。私はタイプミスを修正しました。 – floatingfrisbee

答えて

1

私が見てきた一般的な間違いは、データコンテキストがリポジトリレベルにあり、各リポジトリは、異なるデータコンテキストを使用していることです。代わりに、リポジトリはすべて、作業単位パターンを使用して同じデータコンテキストを共有する必要があります。

+0

クール... UoWも実装しているので、かなり簡単に試してみることができます。それが成功したかどうかを知らせるために報告します。 – floatingfrisbee

+0

それを試しましたが、うまくいかないようです。私は使用したコードで質問を更新しました。 – floatingfrisbee

+0

問題を解決していない可能性がありますが、これが動作するための要件であることは間違いありません。おそらく他の問題はあなたのリポジトリ層自体​​にあります。つまり、 'IQueryable'であるべきところで' IEnumerable'を使っているのが見えます。これは、EFが既に提供しているので、あなたのための抽象化。 – BrokenGlass

関連する問題