所以我正在做一个项目来对我的游戏进行编目,但我遇到了一个问题。我有一个包含两个表的数据库,其分割如下:

游戏信息

  • gameId(PK) 是身份(自动递增)
  • 游戏价格
  • 名称
  • 版本

  • Game_Notes
  • noteId(PK) Is Identity(auto-increments)
  • 注释
  • noteDate
  • gameId(FK)

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

    现在在 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) 的数字反射(reflect)在“Game_Notes”中的 gameId(FK) 中。

    任何人都可以帮助我或指出我可以阅读的文章?谢谢。

    -更新-
    使问题更清楚。

    最佳答案

    如果我理解你的问题是正确的,你正在努力完成两件事:

  • 获取Game_Information中新插入记录的gameId
  • 在以下对 Game_Notes 的插入语句中使用该 gameId

  • 虽然有无数种方法可以做到这一点,但使用“输出”值将是一个建议。就像是:
    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);
    

    免责声明:我没有测试过任何这些,只是想为您指明正确的方向。

    关于c# - 一对多关系的 INSERT 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30853270/

    10-11 15:16