在LINQ2SQL插入后获取主键

时间:2011-07-08 18:19:57

标签: c# .net linq-to-sql

如何通过LINQ2SQL检索新创建的记录的主键?

var peon = new Peon { name = 'Serf' };
context.Peons.InsertOnSubmit(peon);
context.SubmitChanges();

LINQ2SQL模型是否会使用主键自动更新?我无法在文档中找到任何相关信息。

或者是否有其他方法可以获取最后插入记录的主键?最好不要搜索记录。

我的问题的上下文是我的类通过多对多表与另一个类相关联。我需要主键将关联插入该表。例如:

// After previous code.
var bossPeonMapping = new { PeonId = peon.Id, BossId = boss.Id };
// Insert mapping

如果LINQ2SQL为我提供了更好的方法,我会很感激。

4 个答案:

答案 0 :(得分:5)

提交更改后,实体应具有主键值。

答案 1 :(得分:2)

在Linq2SQL设计器中,查看作为主键的字段的属性。确保其AutoGeneratedValue = True,并且Auto-Sync = OnInsert。如果是,则应在插入期间填充数据库服务器分配的值。

答案 2 :(得分:0)

是的,在第一次提交更改后,密钥将可用,但您不需要它。您可以在新映射中使用该实体。所以新的{Peon = peon,...}而不是peon.id

您可以同时提交它们,这也将免费为您提供交易管理。

答案 3 :(得分:0)

try
{
    var peon = new Peon { name = 'Serf' };
    context.Peons.InsertOnSubmit(peon);
    context.SubmitChanges();
    return peon.Id;
}
catch(Exception e) { }