2009-05-17 28 views
3

同様の状況に:How to add several dependent records with LINQ2SQL (これは論理的なようだが、それは私のために動作しません)Linq2Sql挿入レコード関連テーブルへ

ASP.NET MVC + Linq2SQL

私は挑戦と呼ばれる2つのテーブルを持っており、参加者。

  • チャレンジ{challengeId、 ChallengeDesc、applicantId、 respondantId}
  • 参加{participantId、姓、氏名}

参加者と課題の間に1対多の関係が存在する - 1各キーのための(applicantId、RespondantId)。

私は新しい応募者と応募者とチャレンジを作成するためにすべてのフィールドを収集する入力フォームを持っています。データバインダーは、すべてのフィールドをチャレンジにバインドし、子の参加者を正しくバインドしますが、Linq2Sqlによって作成された構造をブラウズすると、参加者オブジェクトの名前はチャレンジオブジェクトのキー名と一致しません(applicantIdはParticipantオブジェクトと一致し、respondantIdはParticipant1と一致します)。オブジェクト)。

私は、InsertOnSubmit(aChallenge)の後にSubmitChanges()をしようとすると、Linq2Sqlからforeign_key制約の検証メッセージが返されます。 SQL Server Profilerでは、参加者が正しく作成されていることがわかりますが、チャレンジが保存されると、これらの新しく挿入された参加者のIDはチャレンジオブジェクトに設定されていないため、システムは外部キー違反メッセージをスローします。

どのように私はこれを乗り越えますか?

答えて

0

通常はDBMLデザイナを使用してデータオブジェクトを編集し、ApplicantRespondentにそれぞれ名前を変更してParticipantという名前を付けます。 ParticipantParticipant1を持つよりも簡単に作業できます。アソシエーションプロパティ(テーブルを結ぶ線)でこれを行うことができます。

Challengeに外部キーを割り当てる場合は、2つの選択肢があります。オブジェクト自体がParticipantの場合は、(新しく名前が変更された)ApplicantおよびRespondentプロパティに割り当てることができます(LINQ to SQLはApplicantIDまたはRespondentIDに応じて更新されます)。 ParticipantIDがある場合は、ApplicantIDまたはRespondentIDに直接割り当てることができます。あなたはそれを私が考えるこの方法(あなたはクラスの参加者とチャレンジを持っていると仮定)を記述する必要が

1

Participant applicant = new Participant(); 
Participant respondant = new Participant(); 
//update your participants here 

Challenge insertedChallenge = new Challenge(); 
//update your challenge values here 

applicant.Challenges.add(insertedChallenge); 
respondant.Challenges1.add(insertedChallenge); 

submitChanges(); 

LINQのツーSQLは、自動的にこれらのプロパティ(挑戦と課題)を割り当てる必要がありますので、設定することができますあなたのためのキー値。

希望します。