【问题标题】:How to get the last inserted id in a Linq To Sql custom sql expression?如何在 Linq To Sql 自定义 sql 表达式中获取最后插入的 id?
【发布时间】:2009-08-03 07:06:10
【问题描述】:

这是我的问题。 我想在 Linq To Sql 中使用自定义 sql 表达式获取最后插入的 Id。

我的插入方法:

public int Add(string Label)
{
    _dbContext.ExecuteCommand("INSERT INTO Products (Label) VALUES (@Label);", Label);

    _dbContext.SubmitChanges();

    var lastId = _dbContext.ExecuteQuery<int>("SELECT Scope_Identity() as [Scope_Identity];").ToList()[0];

    return  lastId;
}

lastId 始终返回 null。当我直接在 Sql Server 中尝试此查询(插入 + 选择)时,它运行良好并返回最后插入的 Id。 我不想使用过程,也不能使用新的 Product 对象(我无法使用 InsertOnSubmit 或其他)。

你能帮帮我吗? 谢谢。

【问题讨论】:

    标签: linq-to-sql tsql


    【解决方案1】:

    好的,我已经找到了方法:

    public int Add(string Label)
    {
       var query = String.Format("INSERT INTO Products (Label) VALUES (@Label); SELECT ProductId FROM Products WHERE ProductId = Scope_Identity();", Label);
    
       var lastId = _dbContext.ExecuteQuery<int>(query).ToList()[0];
    
       return  lastId;
    }
    

    【讨论】:

      【解决方案2】:

      尝试使用:

      INSERT INTO Products (Label) OUTPUT inserted.ProductID VALUES (@Label);
      

      罗伯

      【讨论】:

      • 感谢您的回复。但它不起作用。我无法检索变量中的输出。
      【解决方案3】:

      我知道您已经回答了,但是我发现还有另一种方法可以做到这一点,这对我的特定场景很有用,其中涉及需要编辑添加到表中的最新记录而不知道那里的 id:

      public int Add(string Label)
      {
          var query = String.Format("INSERT INTO Products (Label) VALUES (@Label);", Label);
          _dbContext.ExecuteCommand(query);
          var lastId = _dbContext.ExecuteQuery<int>("SELECT IDENT_CURRENT('Products ')").First();
      
      
          return  lastId;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多