Pregunta

Aquí está el código revelador.

       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 tiene una relación fk en TournamentTeam.TeamID, TeamID es una columna de identidad

Lo que no entiendo es que cuando TournamentTeam se inserta, toma el nuevo valor de identidad. Incluso cuando depuro el código, el nuevo registro está recibiendo la nueva identificación del equipo. Pero cuando se trata de generar la inserción, evita este valor por completo y realiza la inserción antes de la instrucción de selección donde toma la nueva columna de identidad.

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

¿Cómo puedo hacer que linq to sql use el valor para la identificación del equipo que he especificado o hacer que la declaración select se genere antes de la declaración de inserción?

¿Fue útil?

Solución

En lugar de configurar el TeamID, establezca la entidad Team en la que acaba de crear. Retrasar SubmitChanges para insertar ambos, luego arreglará los identificadores cuando finalice la inserción.

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

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

TournamentParticipants.InsertOnSubmit(newSignup);
SubmitChanges();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top