我如何获得创纪录的ID,而无需提交并重新查询?(How do I get Id of a recor

2019-09-23 12:26发布

我有一个设置为自动递增的ID(显然INT)。

var dc = new DataContext([STRING]);

var usersTable = dc.GetTable<Audit_User>();

var user = usersTable.FirstOrDefault(o => o.Username.Equals("NAME"));

if (user == null)
{
   user = new Audit_User()
   {
      Username = "NAME"
   };

   usersTable.InsertOnSubmit(user);
}

//HERE - I need access to the user Id

dc.SubmitChanges();

更多情况下,请参阅标签。

Answer 1:

//这里 - 我需要访问的用户ID

其实你不知道 。 如果你一直使用LINQ-2-SQL可以分配,而不是设置user.id填充的关系(最可能的原因,为什么你需要的ID)的用户实体

因此,而不是做

somerelated_table.fk_user_id = user.id

你做

somerelated_table.user = user

当你调用的SubmitChanges LINQ-2-SQL将处理user.id的正确分配。 另外作为奖励它都将在一个事务中完成的。 这是LINQ-2-SQL的美感。

如果你需要的ID为一些操作,而无需使用LINQ-2-SQL,您可以无论如何做到这一点的SubmitChanges后,它不会怎样都无所谓



Answer 2:

因为它是在服务器端生成的数据提交给SQL Server之前你不能ID。 如果急需的话,我建议生成ID在客户端(这可能是痛苦的)。

另一个问题是,为什么你需要插入行之前访问ID,在大多数情况下,它可能会如何LINQ2SQL作品的误解。

有时候没有外键在数据库表设置。 要插入ID中所引用的表,只是把它从yourEntity.ID插入之后,它应该由系统来填补。 不要忘了再次提交修改。



Answer 3:

那么,在你的代码, user.ID包括用户ID(如果它之前就已经存在了,当然,如果它是一个新的)。 我不知道这件事,但我认为还的SubmitChanges自动查询的新记录的新ID,并自动填补现有对象的身份属性,所以在使用的情况下,如果你以后用它 user.ID不会花费额外的查询在的SubmitChanges(这将是0,如果是新的纪录,你没叫的SubmitChanges)

但是,如果你想调用的SubmitChanges之前使用id,最好的办法,以将其添加到数据库使得ID数据库(的System.Guid)的唯一标识符,然后简单地用插入之前定义“ID” GUID已经在INSERT语句定义。

只需注意插入可能会失败,并且在这种情况下,你必须确保一旦发生问题,你做了什么,同时假设与作为的GUID您正在使用存在将被回滚相同ID的用户。



文章来源: How do I get Id of a record without submitting and re-querying?