INSERT声明为一对多关系

时间:2015-06-15 19:17:32

标签: c# sql webmatrix

所以我正在开发一个项目来编目我的游戏,我遇到了一个问题。我有一个包含两个表的数据库,如下所示:

Game_Information

  • gameId(PK)是身份(自动增量)
  • gamePrice
  • 姓名

Game_Notes

  • noteId(PK)是身份(自动增量)
  • 注释
  • noteDate
  • 游戏ID(FK)

一个游戏可以有很多音符,因此两个表之间存在一对多关系,其中“Game_Notes”中名为“gameId”的列是FK /引用同名“Game_Information”的主键。 / p>

现在在Webmatrix中,我编写了一个页面,可以让我输入游戏的价格,名称和版本。在同一页面中,我还可以添加关于游戏的注释。在帖子上,页面从文本框中获取信息并尝试执行以下操作:

db.Execute("INSERT INTO Game_Information (gamePrice, name, edition) VALUES (@0, @1, @2)", gamePrice, name, edition); 
db.Execute("INSERT INTO Game_Notes(notes, noteDate) VALUES (@0, @1)", notes, noteDate);

现在这可以工作并将信息放在正确的表中,但它将“Game_Notes”中的gameId(FK)留空。

我想要的是“Game_Information”中分配给gameId(PK)的数字反映在“Game_Notes”中的gameId(FK)中。

任何人都可以帮我这个或指向我能读到的文章吗?感谢。

-Update- 让问题更加明确。

2 个答案:

答案 0 :(得分:4)

如果我理解你的问题,那么你就是想要完成两件事:

  1. 在Game_Information中获取新插入记录的gameId
  2. 在以下插入语句中将该gameId用于Game_Notes
  3. 虽然有无数种方法可以做到这一点,但使用“输出”值将是一个建议。类似的东西:

    var id = db.QueryValue("INSERT INTO Game_Information (gamePrice, name, edition) output Inserted.gameId VALUES (@0, @1, @2)", gamePrice, name, edition); 
    

    查看一些帖子以获取更多相关信息:Sql Server return the value of identity column after insert statement

    然后,在以下语句中使用该id:

    db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", id, notes, noteDate);
    

    免责声明:我没有对此进行过任何测试,只是试着指出正确的方向。

答案 1 :(得分:0)

您需要在第二个db.execute语句中包含gameId

db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", gameId, notes, noteDate);