Linq2Sql Вставить записи в связанные таблицы - PullRequest
3 голосов
/ 18 мая 2009

Аналогичная ситуация с: Как добавить несколько зависимых записей с LINQ2SQL (это кажется логичным, но у меня это не работает)

ASP.NET MVC + Linq2SQL

У меня есть 2 таблицы под названием «Вызовы и участники».

  • Challenge {challengeId, ChallengeDesc, ApplicId, responseantId}
  • Участники {memberId, FirstName, LastName}

Существует 1-много отношений между участниками и вызовами - 1 для каждого ключа (ApplicId, RespondantId).

У меня есть форма ввода, которая собирает все поля для создания нового кандидата и респондента и запроса. Блок данных связывает все поля с вызовом и его дочерними участниками правильно, однако имена объектов-участников не совпадают с именами ключей в объекте вызова при просмотре структуры, созданной Linq2Sql (ApplicIID совпадает с объектом Participant, а responseantId совпадает с Participant1 объект).

Поэтому, когда я пытаюсь выполнить SubmitChanges () после InsertOnSubmit (aChallenge), я получаю сообщение проверки ограничения foreign_key от Linq2Sql. В SQL Server Profiler я вижу, что участники создаются правильно, но при сохранении запроса идентификаторы этих вновь вставленных участников не устанавливаются для объекта вызова, поэтому система выдает сообщение о нарушении внешнего ключа.

Как мне пройти через это?

Ответы [ 2 ]

1 голос
/ 23 июля 2009

Вы должны написать это так, как я думаю (при условии, что у вас есть классы Участник и вызов):

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 должен автоматически назначить эти свойства (вызовы и вызовы), чтобы он мог устанавливать значения ключей для вас.

Надеюсь, это поможет.

0 голосов
/ 01 июня 2009

Возможно, вы захотите отредактировать свои объекты данных (обычно с помощью дизайнера DBML) и переименовать свойства типа Participant в Applicant и Respondent соответственно. С ним будет легче работать, чем с Participant и Participant1. Вы можете сделать это в свойствах ассоциации (линии, соединяющие таблицы).

Если вы хотите назначить внешние ключи в Challenge, у вас есть два варианта. Если у вас есть сами объекты Participant, вы можете назначить их свойствам Applicant и Respondent (недавно переименован) (и LINQ to SQL обновит ApplicantID или RespondentID соответственно). Или, если у вас есть ParticipantID s, вы можете назначить их ApplicantID или RespondentID напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...