2017-02-21 48 views
0

我使用MV5Entity Frameowrk连接到数据库SQL ServerMVC实体Framwork,插入使用选择MAX()从表

我需要做一个Insert当越来越ID这样开发的应用程序。

从表中选择max(id)+1,其中field_id = @ID。

这个想法是在一次交易中完成。 这是可能的做它在实体框架或我应该使用Store Procedure

+0

你想用这个完成什么?这听起来像你*应该使用的是一个'IDENTITY'列,而不是试图创建自己的(这将导致问题)。 – David

+0

这是一个部门表......它对每个国家/地区都有一个唯一的ID。但你已经说了一个很好的决定..谢谢 – Diego

回答

1

EF将您提供的C#表达式编译为SQL,然后执行生成的SQL。所以,你可以写在LINQ这样的查询,将在-其实在一个单一的“呼叫”到数据库来计算:

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

请注意,如果你这样做,这样你可以指定一个非现有的ID添加到新的条目 - 没有必要。 EF会为您处理这个问题,只要该字段的名称为Id并且类型为long。只是不要分配任何价值。

+0

对不起,我不明白..你说我可以做一个table.Select(max)然后是:saveChanges并且它在同一个事务中执行?谢谢 – Diego

+0

不需要道歉。然而,这不是我所说的。我说如果你使用LINQ并创建一个类似于你在C#中展示的语句,它将通过一次数据库调用来执行。查看我的编辑 –

+1

@Diego EF的全部重点是使开发人员能够使用他们最喜欢的编程语言,而不使用sql。如果您使用的是EF和SQL,那么您可能错过了EF功能。 –