c# - 如何使用linq从表中获取最大id

标签 c# linq entity-framework-6

我有一个 Estimation 表,其中有一列 EstimationNo,我正在尝试像这样获得最大 EstimationNo-

var result = cont.SalesEstimateCont.Where(x => x.Org_ID == CurrentOrgId);
var estimationMaxNo = result.Any() ? result.Max(x => x.EstimateNo) + 1 : 1;

  var DigitalEstimate = new SalesEstimate()
        {
            EstimateNo=estimationMaxNo;
        };
    cont.Estimate.Add(DigitalEstimate );
    cont.Savechanges();

但问题是,如果同一个表同时被不同的用户保存,它会为两个用户保存相同的 EstimationNo。喜欢- 10,10

现在,如何处理这个问题..请给出一些解决方案。

最佳答案

最好的策略是让数据库引擎(我假设它是 SQL Server)处理 EstimateNo 字段的递增。这可以通过 identity 来完成可正常添加的规范not primary key领域也。

ALTER TABLE SalesEstimateCont drop column EstimateNo 
go
ALTER TABLE SalesEstimateContadd Add EstimateNo int NOT NULL IDENTITY (1,1) 

请注意:如果您有现有数据或需要修改某些数据,您可能需要一些额外的努力来实现这一点(即使用临时表并通过设置 IDENTITY INSERT ON )

关于c# - 如何使用linq从表中获取最大id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577037/

相关文章:

c# - 使用linq从基类列表中获取相同类型的继承类项

asp.net - .net MVC 将 linq 数据从 Controller 传递到 View

entity-framework - Linq-to-SQL 和 Entity Framework 在同一个项目中?

c# - LINQ 连接字符串位置

c# - IEnumerable接口(interface)

c# - Visual Studio Intellisense颜色编码不起作用

c# - 使用平均值时 linq 查询出错

c# - 在 LINQ to Entities 中删除记录的正确方法

entity-framework - 使用新映射规则扩展 EF 6.2

visual-studio - Visual Studio Entity Framework 错误(无法加载init.ps1)