如何在 FluentMigrator 中获取最后插入的 id
Posted
技术标签:
【中文标题】如何在 FluentMigrator 中获取最后插入的 id【英文标题】:How to get last inserted id in FluentMigrator 【发布时间】: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 列。
【问题讨论】:
这可能是一个重复的问题。这是我发现的搜索结果:***.com/questions/24167605/… 这能回答你的问题吗? How to retrieve inserted identity in migration of FluentMigrator 【参考方案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。如果您找到如何获得价值,也许它会有所帮助。让我看看有没有可能以上是关于如何在 FluentMigrator 中获取最后插入的 id的主要内容,如果未能解决你的问题,请参考以下文章