我试图使用LINQ在一个预定义的(在生产中)表中创建一个新的记录,其中ID不是IDENTITY。
我已经看到了以前的答案关于使用SQL和事务来解决这个问题:获取下一个id号的最好方法是不使用"identity"
我的问题是如果有一个LINQ/c#版本,因为我想在c#中有一个函数,我可以在代码中与其他函数。
需要说明的是,我们使用的是旧的SQL-server 2000,所以服务器内部没有原生的。net支持。
编辑
我希望有人能展示实际的c#/LINQ代码。关于SELECT TOP 1 [TABLE_ID] ORDER BY DESC,然后在TABLE_ID的值上加1…但也许这个问题太难了?
使用SQL端标识的原因是SQL可以控制任何并行性问题。如果两个用户同时调用你的c#标识码,你可能会得到两个相同的id。
要解决这个问题,要么使用SQL标识,要么生成guid而不是顺序id。
这些都是非常标准和常见的事情,做其他事情没有太多意义,因为你将不得不处理已经解决的并发性痛苦。
说了这些,你可以做显而易见的:
INSERT INTO my_table (id, ...)
VALUES ((SELECT MAX(id)+1 FROM my_table), ...)
我认为最好的主意是当你打开Page_Load
上的页面时,在table
中创建一个新的记录/行,然后你可以将创建的id显示为项目id,然后当用户提交表单时,然后用所有信息更新该记录。
您可以调度作业来清除空数据,例如,如果用户打开新页面,但决定不继续,并且根据您想要的任何条件不提交表单(您可以使用bit作为提交或不提交的条件)。