私は EF を初めて使用しますが、シナリオを説明するために最善を尽くします。私のDBには、RecommendationTopic、Recommendation、およびQuestionという3つのテーブルがあります。各 RecommendationTopic には複数の推奨事項を含めることができ、各推奨事項には複数の質問を含めることができます。質問テーブルに事前定義済みの質問があるとします。
以下のような質問のリストを返すサービスが 1 つあります。
public List<Question> FetchQuestions(int categoryID)
{
using (Entities context = new Entities())
{
questions = context.Questions.Where(i => i.ID >= 0).ToList();
}
}
コードが以下のような RecommendationTopic と Recommendation を作成するために使用される別のサービスがあります。
public void ManageRecommendation(RecommendationTopic recommendationTopic)
{
using (Entities context = new Entities())
{
context.AddObject("RecommendationTopics", recommendationTopic);
context.SaveChanges();
}
}
私のクライアントコードは以下のようになります:
List<Question> questions;
using (QuestionServiceClient client = new QuestionServiceClient())
{
questions = client.FetchQuestions();
}
using (RecommendationServiceClient client = new RecommendationServiceClient())
{
RecommendationTopic rTopic = new RecommendationTopic();
rTopic.CategoryID = 3;
rTopic.Name = "Topic From Client";
Recommendation rCom = new Recommendation();
rCom.Text = "Dont!";
rCom.RecommendationTopic = rTopic;
rCom.ConditionText = "Some condition";
rCom.Questions.Add(questions[0]);
rCom.Questions.Add(questions[1]);
client.ManageRecommendation(rTopic);
}
クライアントは 2 つの個別のサービス呼び出しを行うため、コンテキストは両方の呼び出しで異なります。これを実行してEFプロファイラーを確認しようとすると、 RecommendationTopic と Recommendation に挿入するクエリだけでなく、質問テーブルも生成されます!
これは、単一のコンテキスト内で同様のコードを実行すると、動作するはずのように動作するため、両方の呼び出しの異なるコンテキストが原因であると確信しています。
質問は、切断されたシナリオで機能させるにはどうすればよいですか?
私のクライアントは、別の呼び出しで質問ドロップダウンを入力し、別の呼び出しで推奨トピックを保存する必要がある Silverlight クライアントである可能性があります。このため、セルフ トラッキング エンティティも使用しています。
ご意見をお待ちしております。-ヴィノード