私がここに開始しました:Implementing LINQ-to-SQL transactions through WCF- パートII
を、私は次のように来ているので。私はレガシーにbasicHttpBindingを使用していますが、私のWCFクライアントはアンマネージドC++(gSOAP)です。だから私はASP.NETセッションを使用して、WCFでaspNetCompatibilityModeを有効にしています。これがうまくいくので、セッションを適切に処理できるようになりました。
私の考えは、セッションごとに別々のLINQ-to-SQL DataContextを割り当て、その方法でトランザクション動作を実現することでした。私がしたいのは、Session内にDataContextインスタンスを格納し、SubmitChanges()を呼び出さずにすべての挿入を行い、次にSubmitChanges()を呼び出してトランザクションをコミットすることです。
残念ながら、SubmitChanges()を呼び出す前にDataContextから以前に挿入したデータをフェッチできないようなLINQ-to-SQLのバグがあります(hereを参照してください)。ドキュメントとヘッダ私は入札自体を取得する必要があります。これはうまくいきません(コードを完全にリファクタリングせずにLINQ-to-SQLの美しさの大部分を失うことなく)...
これで問題は次のようになります:WCFを使ってDataContext単位のトランザクションを正しく実装する方法?クライアントが管理されていないため、私はクライアントからTransactionScopeを伝えることができません。上記のバグのため、内部LINQ-to-SQLトランザクションを使用することはできません。私が持っている唯一のものはASP.NETセッション(これは動作します)です。おそらく私はSessionScopeを何とかSessionに保存できますか?
ありがとうございました。まあ、Single()呼び出しを修正するのは問題があります。なぜなら、from ... where ... ... LINQ構文を使用することができないからです。そして、これはLINQをあまりエキサイティングにします=) –
LINQがリポジトリレベルでどのようにWCF境界と無関係でなければならないのかわかりません...少なくとも、IMO。 –