【问题标题】:How to get last inserted id in FluentMigrator如何在 FluentMigrator 中获取最后插入的 id
【发布时间】:2021-05-14 10:34:07
【问题描述】:

我将 FluentMigrator 与 MySql 和 C# 一起使用。

[Migration(3)]
public class _0003_TestMigrationTI : Migration
{
    public override void Up()
    {
        Insert.IntoTable("cmn_file_types").Row(new { Name = "Image", Code = "IMG" });

        ???
    }
}

如何在 same Up() 方法中的 Insert.IntoTable 之后获取最后插入的 id? ID 是 cmn_file_types 表中的一个 INT PRIMARY AUTO_INCREMENT 列。

【问题讨论】:

标签: c# mysql fluent-migrator last-insert-id


【解决方案1】:

MigrationBase 类具有 ConnectionsString 属性。只需使用它来创建您的 ADO.net 查询:

var builder = new SqlConnectionStringBuilder(ConnectionString);
var query = "SELECT IDENT_CURRENT('Table')"    

using (var connection = new SqlConnection(builder.ConnectionString))
{
    connection.Open();
    var command = new SqlCommand(query, connection);
    var lastId = command.ExecuteScalar();
    connection.Close();
}

更新:

试试这个。为我工作。在这里,您将获得与新查询相同的事务,这与 ADO 的情况不同。所以“选择 IDENT_CURRENT”会显示未提交的当前 ID。

Execute.WithConnection((IDbConnection connection, IDbTransaction transaction) =>
            {
                var command = connection.CreateCommand();
                command.Transaction = transaction;
                command.CommandText = @"select IDENT_CURRENT('TestTable1')";
                var count = command.ExecuteScalar();
            });

【讨论】:

  • 我在Insert.IntoTable后面加了这几行,但是lastId会是0。我想是因为insert是在其他事务上运行的,它会在Up方法之后提交。跨度>
  • 是的,你是对的。错过了交易的那一刻。只记得我们可以使用 Execute.Sql。如果您找到如何获得价值,也许它会有所帮助。让我看看有没有可能
猜你喜欢
  • 2016-10-24
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多