- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何在 LINQ To SQL 中第二次访问数据库的情况下从表中获取主键 ID 号?
现在,我将数据提交到一个表,然后再去查明分配给新字段的 ID(在自动递增 ID 字段中)。我想在 LINQ To SQL 中而不是在 Raw SQL 中执行此操作(我不再使用 Raw SQL)。
此外,我的问题的第二部分是:我总是很小心地知道在线用户的 ID,因为我宁愿使用他们的 ID 在各种表中调用他们的信息,而不是使用 GUID 或用户名,这都是长字符串。我这样做是因为我认为 SQL Server 进行数字比较比进行用户名(字符串)甚至 guid(很长的字符串)比较更有效(?)。我的问题是,我是否比我应该更关心?区别是否值得始终将用户 ID (int32) 保持在 session 状态中?
@RedFilter 为第一个问题提供了一些有趣/有希望的线索,因为我现阶段无法尝试,如果有人知道或可以确认他在他的答案的评论部分中建议的这些更改吗?
最佳答案
如果您有对象的引用,您可以只使用该引用并在调用 db.SubmitChanges()
之后调用主键。 LINQ 对象将自动更新其(标识符)主键字段以反射(reflect)通过 SQL Server 分配给它的新主键字段。
例子(vb.net):
Dim db As New NorthwindDataContext
Dim prod As New Product
prod.ProductName = "cheese!"
db.Products.InsertOnSubmit(prod)
db.SubmitChanges()
MessageBox.Show(prod.ProductID)
您可以将上述代码包含在一个函数中并返回 ProductID(或等效的主键)并在其他地方使用它。
编辑:如果您不进行原子更新,您可以将每个新产品添加到一个单独的集合中,并在调用 SubmitChanges 后循环访问它。我希望 LINQ 像数据集一样提供“数据库先睹为快”。
关于c# - 如何在不进行第二次旅行的情况下从表中获取主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083756/
我是一名优秀的程序员,十分优秀!