Entity framework mvc实体框架,使用表中的select max()插入

Entity framework mvc实体框架,使用表中的select max()插入,entity-framework,stored-procedures,Entity Framework,Stored Procedures,我正在开发一个应用程序,使用MV5和Entity Framework连接到SQL Server数据库 我需要做一个插入的地方,是得到这样的ID 从表中选择maxid+1,其中字段_id=@id 想法是在一次交易中完成。 这是可以在实体框架中完成的,还是应该使用存储过程?EF将您提供的C表达式编译成SQL,然后执行生成的SQL。因此,您可以在LINQ中编写这样一个查询,它实际上将在对数据库的一次调用中计算: long id = MyDbContext.MyDbSet.Max(entity =>

我正在开发一个应用程序,使用MV5和Entity Framework连接到SQL Server数据库

我需要做一个插入的地方,是得到这样的ID

从表中选择maxid+1,其中字段_id=@id

想法是在一次交易中完成。
这是可以在实体框架中完成的,还是应该使用存储过程?

EF将您提供的C表达式编译成SQL,然后执行生成的SQL。因此,您可以在LINQ中编写这样一个查询,它实际上将在对数据库的一次调用中计算:

long id = MyDbContext.MyDbSet.Max(entity => entity.Id) + 1;

请注意,如果您这样做是为了给一个新条目分配一个不存在的ID,那么就没有必要了。只要字段名为Id并且类型为long,EF就会为您处理这个问题。只是不要给它赋值。

你想用这个做什么?听起来您应该使用的是一个标识列,而不是试图创建自己的标识列,这会导致问题。它是一个部门表。。。每个国家/州都有一个唯一的ID。但是你说了一个好决定。。谢谢,教授,我不明白。。你是说我可以做一个表。选择MAX,然后选择:saveChanges,它会在同一个事务中执行吗?谢谢,不用道歉。然而,我不是这么说的。我说过,如果使用LINQ并创建一个类似于在C中显示的语句,它将通过一个DB调用执行。看我的edit@DiegoEF的全部目的是使开发人员能够使用他们最喜欢的编程语言,而不要使用sql。如果您将EF和SQL结合使用,那么您可能错过了EF功能。@Diego还注意到,依赖此模式是一个糟糕的设计选择。当您使用这个Id时,它可能已经被使用了,这就是服务器端开发的本质。