Каждый раз, когда я пытаюсь добавить запись в БД, транзакция завершается с ошибкой «Входная строка была не в правильном формате», хотя я пытался без каких-либо строк!
Это даст вам больше понимания в то, что я пытаюсь сделать, в основном пользователь моего приложения запрашивает свой идентификатор сеанса при запуске, который отслеживает его действия, на следующем этапе сервер получил запрос и получает идентификатор сеанса из MySQL, а затем передает его обратно к клиенту, который использует этот номер для формирования аутентификации на своем собственном канале.
То, что я вижу в журнале ниже, похоже, является недопустимым преобразованием, которое вызывает это исключение.
Я использую:
- . NET Core 2.1
- Pomelo.EntityFrameworkCore. MySql 3.1.0
- Oracle MySQL 5.1.73 скомпилировано для linux -gnu x86_x64 (нет возможности его обновить)
Я надеюсь, что кто-то может помочь.
Вот этот проблемный код вместе с определением сущности, дизайна таблицы и журнала ошибок:
public static uint CreateSession(UsageTracking usageTracking)
{
using (MySQL SQL = new MySQL())
{
SQL.UsageTracking.Add(usageTracking);
SQL.SaveChanges();
return usageTracking.SessionID;
}
}
public class UsageTracking
{
[Key]
public uint SessionID { get; set; }
[MaxLength(7)] [Required]
public string USID{ get; set; }
[Required]
public long Date { get; set; }
}
class MySQL : DbContext
{
public static string connectionHost;
public static string connectionPort;
public static string connectionDB;
public static string connectionUsn;
public static string connectionPsw;
public DbSet<DB.UsageTracking> UsageTracking { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options
.UseMySql($"server={connectionHost};port={connectionPort};database={connectionDB};user=
{connectionUsn};password={connectionPsw}", mySQLOptions => mySQLOptions
.ServerVersion(new Version(5,1,73), ServerType.MySql)
);
}
}
Таблица отслеживания использования:
CREATE TABLE `UsageTracking` (
`SessionID` int(4) unsigned NOT NULL,
`USID` varchar(7) DEFAULT NULL,
`Date` int(8) DEFAULT NULL,
PRIMARY KEY (`SessionID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Журнал ошибок:
<logevent time="2020-01-15 16:24:17.2857" level="ERROR">
<message>Input string was not in a correct format.</message>
<type>System.FormatException</type>
<trace> at System.Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseUInt32(ReadOnlySpan`1 value, NumberStyles options, NumberFormatInfo numfmt)
at System.String.System.IConvertible.ToUInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.ChangeType(Object objectValue) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 703
at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.GetValue(MySqlConnectionStringBuilder builder) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 674
at MySqlConnector.Core.ConnectionSettings..ctor(MySqlConnectionStringBuilder csb) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionSettings.cs:line 39
at MySqlConnector.Core.ConnectionPool.GetPool(String connectionString) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs:line 405
at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 292
at MySql.Data.MySqlClient.MySqlConnection.Open() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 280
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction()
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext _, Boolean acceptAllChangesOnSuccess)
at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
at ReportingServer.DB.CreateSession(UsageTracking usageTracking) in C:\Users\User\source\repos\Reporting Server\MySQL.cs:line 20
at ReportingServer.APIs.GetSessionID() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 66
at ReportingServer.APIs.Process() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 41
at ReportingServer.HTTPServer.<Listen>b__10_0(Object HTTPRequest) in C:\Users\User\source\repos\Reporting Server\HTTPServer.cs:line 135</trace>
<source>System.Private.CoreLib</source>
<location>
<ReportedIn>ReportingServer.Log</ReportedIn>
<OnLine>17</OnLine>
</location>
</logevent>