如何在 FluentMigrator 中获取最后插入的 ID

问题描述

我在 MysqL 和 C# 中使用 FluentMigrator。

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

        ???
    }
}

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

解决方法

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();
            });