Linq to sql вызывает ошибки ограничения внешнего ключа - PullRequest
1 голос
/ 02 августа 2009

Вот действующий код.

       TournamentTeam newTeam = new TournamentTeam();
        TournamentTeams.InsertOnSubmit(newTeam);
        SubmitChanges();

        TournamentParticipant newSignup = new TournamentParticipant
        {
            CheckedIn = false,
            TournamentID = tournamentId,
            UserID = participant.UserID,
            TeamID = newTeam.TeamId
        };

        TournamentParticipants.InsertOnSubmit(newSignup);
        SubmitChanges();

TournamentParticipants.TeamId имеет отношение fk к TournamentTeam.TeamID, TeamID - это столбец идентификаторов

Чего я не понимаю, так это того, что когда TournamentTeam получает вставки, он получает новое значение идентификатора. Даже когда я отлаживаю код, новая Регистрация получает новый идентификатор команды. Но когда дело доходит до генерации вставки, он полностью избегает этого значения и выполняет вставку перед оператором выбора, где он захватывает новый столбец идентификаторов.

exec sp_executesql N'INSERT INTO [dbo].[TournamentParticipants]([UserID], [TournamentID], [CheckedIn]) VALUES (@p0, @p1, @p2)

SELECT [t0].[TeamID] FROM [dbo].[TournamentParticipants] AS [t0] WHERE ([t0].[UserID] = @p3) AND ([t0].[TournamentID] = @p4)',N'@p0 int,@p1 int,@p2 bit,@p3 int,@p4 int',@p0=29805,@p1=247,@p2=0,@p3=29805,@p4=247

Как мне сделать так, чтобы linq to sql использовал значение для идентификатора команды, которое я указал, или чтобы оператор выбора был сгенерирован перед оператором вставки?

1 Ответ

7 голосов
/ 02 августа 2009

Вместо установки TeamID установите сущность Team на ту, которую вы только что создали. Задержите SubmitChanges, чтобы вставить оба, затем он исправит идентификаторы, когда вставка будет завершена.

TournamentTeam newTeam = new TournamentTeam();
TournamentTeams.InsertOnSubmit(newTeam);

TournamentParticipant newSignup = new TournamentParticipant
{
    CheckedIn = false,
    TournamentID = tournamentId,
    UserID = participant.UserID,
    Team = newTeam
};

TournamentParticipants.InsertOnSubmit(newSignup);
SubmitChanges();
...