MySQL, Connector, добавляющий enum со значением на единицу меньше, чем фактическое
м, используяMySQL Connector для .NET для управления базой данных MySQL из C #.
Когда я пытаюсь вставить enum в базу данных, он добавляет enum со значениемна один меньше, чем фактический один.
public enum MyEnum {
FirstValue, SecondValue, ThirdValue;
}
public void InsertEnum() {
MySqlConnection con = new MySqlConnection(connStr);
string sql = "INSERT INTO table (Col1) VALUES (@enumVal);";
MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue);
//Note I'm trying to insert 'SecondValue' --^
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
Это вставкиFirstValue
в базе данных.
Col1
столбец в базе данных имеет тип данных ENUM:
ENUM('FirstValue','SecondValue','ThirdValue')
Если я попытаюсь добавитьMyEnum.FirstValue
Я получаю ошибку усечения данных (data truncated for column COLUMN_NAME
), поскольку он пытается использовать тот же индекс, что и .NET (0
в случаеMyEnum.FirstValue
), который является зарезервированным значением вMySQL Enums (так как они начинаются на1
по умолчанию).
Решение состоит в том, чтобы добавить+1
для всех значений перечисления или, возможно, сделать расширение:
cmd.Parameters.AddWithValue("@enumVal", MyEnum.SecondValue + 1);
Мне все еще кажется неправильным, что я должен изменить значение вручную, чтобы библиотека преобразовывала его автоматически.
Я делаю что-то не так, или по умолчанию нет способа справиться с этим?