1

这是相关的代码。

       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 在 TournamentTeam.TeamID 上有一个 fk 关系,TeamID 是一个标识列

我不明白的是,当 TournamentTeam 获得插入时,它会获取新的身份值。即使当我调试代码时,新注册也会收到新的团队 ID。但是在生成插入时,它完全避免了这个值,并在选择语句之前执行插入,它抓取新的标识列。

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 使用我指定的团队 ID 的值,或者在插入语句之前生成 select 语句?

4

1 回答 1

7

不要设置 TeamID,而是将 Team 实体设置为您刚刚创建的实体。延迟 SubmitChanges 以插入两者,然后在插入完成时修复 ID。

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

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

TournamentParticipants.InsertOnSubmit(newSignup);
SubmitChanges();
于 2009-08-02T19:26:44.937 回答