从MariaDB 10.3.16 开始似乎不可能做到这一点
我在https://jira.mariadb.org/browse/MDEV-20111上提出了一个错误,供开发人员考虑添加此功能或升级文档以明确表示无法完成。
我通过在 c# 代码中使用 Mysqlconnector 选择值来解决这个问题
private long ReadMaxIdFromTable()
{
MySqlConnection connection = null;
try
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder();
var builderenv = builder.AddJsonFile("config/appsettings.json", optional: false, reloadOnChange: false)
.AddJsonFile($"config/appsettings.{environment}.json", false, false).AddEnvironmentVariables();
IConfigurationRoot configuration = builderenv.Build();
var connectionString = configuration.GetConnectionString("ConnectionStringName");
connection = new MySqlConnection(connectionString);
connection.Open();
var cmd = connection.CreateCommand() as MySqlCommand;
cmd.CommandText = @"SELECT MAX(`Id`) FROM `Table`";
var result = (long)cmd.ExecuteScalar();
return result;
}
catch (Exception)
{
throw;
}
finally
{
if (connection != null && connection.State != System.Data.ConnectionState.Closed)
{
connection.Close();
}
}
}
没有我想要的那么干净,但是它可以完成工作。
稍后我SETVAL
再次从 c# 代码中使用插值 sql 字符串中的值。
var currentSeq = ReadMaxIdFromTable();
migrationBuilder.Sql($"SELECT SETVAL(`MySequence`, {currentSeq}, true);");
此外,请注意Up()
它在任何内容到达数据库之前执行的所有代码,这意味着SELECT MAX(Id) FROM Table;
必须在迁移开始操作数据库之前产生我们正在寻找的值。