2009-08-02 62 views
1

这是相关的代码。Linq to 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对TournamentTeam.TeamID一个FK关系,TeamID是标识列

我不明白的是,当TournamentTeam得到刀片,它抓住了新的标识值。即使在我调试代码时,新注册接收新团队ID。但是在生成插入时,它完全避免了这个值,并在它获取新标识列的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的使用,我已经指定了球队ID值,或使select语句的INSERT语句之前产生的?

回答

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(); 
+0

我改变了它,我仍然看到没有TeamID的INSERT发生在获取标识列的select语句之前。 – jdelator 2009-08-02 20:05:29