Linq в sql вызывает ошибки ограничения внешнего ключа

Вот откровенный код.

       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 получает вставки, она получает новое значение идентификатора. Даже когда я отлаживаю код, новая регистрация получает новый идентификатор команды. Но когда дело доходит до создания вставки, он полностью избегает этого значения и выполняет вставку перед оператором select, где он захватывает новый столбец идентификаторов.

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 использовать значение для идентификатора команды, которое я указал, либо создать оператор выбора перед оператором вставки?


person jdelator    schedule 02.08.2009    source источник


Ответы (1)


Вместо того, чтобы устанавливать 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();
person tvanfosson    schedule 02.08.2009
comment
Я изменил его на это, и я все еще вижу, что INSERT без TeamID происходит перед оператором select, который захватывает столбец идентификаторов. - person jdelator; 03.08.2009
comment
Неважно, по какой-то причине у меня был TeamID в TournamentParticipant в качестве столбца идентификации. Даю вам ответ, потому что я думаю, что это все равно улучшит мой код. - person jdelator; 03.08.2009