2009-05-17 14 views
3

situation similaire à: How to add several dependent records with LINQ2SQL (ce qui semble logique, mais cela ne fonctionne pas pour moi)linq2sql d'insérer des enregistrements aux tables connexes

ASP.NET MVC + Linq2SQL

J'ai 2 tables appelés défis et Participants

  • défi {challengeId, ChallengeDesc, applicantId, respondantId}
  • participants {participantId, nom, prénom}

Il y a 1 nombreuses relations entre les participants et les défis - 1 pour chaque touche (applicantId, RespondantId).

J'ai un formulaire de saisie qui recueille tous les champs pour créer un nouveau demandeur et répondant et le défi. Le Databinder lie tous les champs à Challenge et ses participants enfants correctement, cependant, les noms des objets participants ne correspondent pas aux noms de clés dans l'objet challenge lors de la navigation dans la structure créée par Linq2Sql (applicantId correspond à Participant objectant et respondantId correspond à Participant1 objet). Donc, quand j'essaie de SubmitChanges() après InsertOnSubmit (aChallenge), je reçois un message de validation de la contrainte foreign_key de Linq2Sql. Dans SQL Server Profiler, je peux voir que les participants sont créés correctement, mais lorsque le challenge est sauvegardé, les ID de ces participants nouvellement insérés ne sont pas définis sur l'objet challenge, donc le système envoie un message de violation de clé étrangère.

Comment puis-je obtenir plus tard?

Répondre

0

Vous pouvez modifier vos objets de données (normalement à l'aide du concepteur DBML) et renommer les propriétés Participant -typed en Applicant et Respondent respectivement. Il sera plus facile de travailler avec que d'avoir Participant et Participant1. Vous pouvez le faire dans les propriétés de l'association (les lignes qui relient les tables).

Lorsque vous souhaitez affecter les clés étrangères dans Challenge, vous avez deux choix. Si vous avez les objets Participant eux-mêmes, vous pouvez les affecter aux propriétés (récemment renommées) Applicant et Respondent (et LINQ to SQL mettra à jour ApplicantID ou RespondentID en conséquence). Ou si vous avez les ParticipantID s, vous pouvez les affecter directement à ApplicantID ou RespondentID.

1

Vous devez écrire cette façon, je pense (en supposant que vous avez des classes participant et Challenge):

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 to SQL doit attribuer automatiquement ces propriétés (défis et défis) afin qu'il puisse régler la valeurs clés pour vous.

Espérons que ça aide.

Questions connexes