问题描述
我在 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();
});