2012-05-07 5 views
0

Entity Manager(C#)で私が実際に理解していない問題に直面しています。私はこのようなものでちょっと新しいので、私のnoobnessと負担してください^^異なるObjectContextオブジェクトのため、InvalidOperationExceptionが発生する

私はUserQuestionのインスタンスを作成しようとしています(UserQuestionnaireとQuestion;アンケート)。だからここ

は、問題のコードです:

public static void Insert_Resultat_Question_BDD(Question q, double resultat) { 
    DataSourceContainer bdd = new DataSourceContainer(); // initializes the Context 
    User user = BLL.Users.Get_User_Connecté(); // Gets the connected user 
    Questionnaire questionnaire = BLL.Questionnaires.Get_Questionnaire_En_Cours(); // Gets the questionnaire being taken 
    UserQuestionnaire user_questionnaire = bdd.UserQuestionnaireSet.FirstOrDefault(i => i.User.id == user.id && i.Questionnaire.id == questionnaire.id); // Get the UserQuestionnaire object for the user and questionnaire above 
    UserQuestion uq = new UserQuestion { score = resultat * q.bareme, bareme = q.bareme, Question = q, UserQuestionnaire = user_questionnaire }; // Creates the object 
    bdd.AddToUserQuestionSet(uq); // Add it to the table 
    bdd.SaveChanges(); // Save 
} 

UserQuestionを作成するときにUserQuestionnaire = user_questionnaire文があるためと、InvalidOperationExceptionを起動するので、私は、エラーを取得しています: 「2つのオブジェクト間の関係別のObjectContextオブジェクトにアタッチされているため、定義できません。

私が理解できないことは、1つのコンテキストしか使用していないことです。 (私が共有したコードの最初の行)

誰かが私を助けることができますか?私はもっ​​と何をするべきか分かりません:

ありがとう!

+0

「BLL」とは何ですか? – SLaks

+0

BLLは、Questionnaires.csやUsers.csのような "ビジネス"クラス(BLL = Business Logic Layer)を置いたフォルダです。 – BPruvost

答えて

0

BLL.Questionnaires.Get_Questionnaire_En_Cours()は独自のObjectContextを使用しているようです。

+0

はいそうです。 基本的には、セッション変数から取得したアンケートのIDを読み取ってデータベースに入り、(objectcontextを使用して)「Questionnaire」オブジェクトを取得して返します。 アンケートが別のオブジェクトコンテキストで処理されても、最終的に私が扱うオブジェクトはuser_questionnaireであり、このオブジェクトは別のオブジェクトコンテキストでは使用されないため、わかりません。 とにかく、どうすればいいですか? – BPruvost

+1

@Tahedoz: 'uq'は、他のコンテキストから' q'を参照します。既存のコンテキストで動作するようにBLLを変更する必要があります。 – SLaks

関連する問題