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はID列です

私が理解していないのは、TournamentTeamが挿入を取得すると、新しいID値を取得するということです。コードをデバッグしても、新しいサインアップは新しいチームIDを受け取ります。ただし、挿入の生成に関しては、この値を完全に回避し、selectステートメントの前に挿入を実行して新しい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の値を使用させるか、insertステートメントの前に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 に答える