我有一个设置为自动递增的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();
更多情况下,请参阅标签。
//这里 - 我需要访问的用户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后,它不会怎样都无所谓
因为它是在服务器端生成的数据提交给SQL Server之前你不能ID。 如果急需的话,我建议生成ID在客户端(这可能是痛苦的)。
另一个问题是,为什么你需要插入行之前访问ID,在大多数情况下,它可能会如何LINQ2SQL作品的误解。
有时候没有外键在数据库表设置。 要插入ID中所引用的表,只是把它从yourEntity.ID插入之后,它应该由系统来填补。 不要忘了再次提交修改。
那么,在你的代码, user.ID
包括用户ID(如果它之前就已经存在了,当然,如果它是一个新的)。 我不知道这件事,但我认为还的SubmitChanges自动查询的新记录的新ID,并自动填补现有对象的身份属性,所以在使用的情况下,如果你以后用它 user.ID不会花费额外的查询在的SubmitChanges(这将是0,如果是新的纪录,你没叫的SubmitChanges)
但是,如果你想调用的SubmitChanges之前使用id,最好的办法,以将其添加到数据库使得ID数据库(的System.Guid)的唯一标识符,然后简单地用插入之前定义“ID” GUID已经在INSERT语句定义。
只需注意插入可能会失败,并且在这种情况下,你必须确保一旦发生问题,你做了什么,同时假设与作为的GUID您正在使用存在将被回滚相同ID的用户。