I'm getting the below exception when running server-side code.
FATAL 2018-04-25 14:41:59,757 [1 ] Abp.AbpBootstrapper - Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> MySql.Data.MySqlClient.MySqlException: Incorrect string value: '\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 ---> MySql.Data.MySqlClient.MySqlException: Incorrect string value: '\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult() at MySqlConMyCompanytor.Core.ResultSet.<ReadResultSetHeaderAsync>d__1.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\ResultSet.cs:line 43 --- End of inner exception stack trace --- at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 92 at MySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__65.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 297 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySql.Data.MySqlClient.MySqlDataReader.<CreateAsync>d__64.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 287 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySqlConMyCompanytor.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\TextCommandExecutor.cs:line 70 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlCommand.cs:line 172 at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.<ExecuteAsync>d__3.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.Execute(IRelationalConMyCompanytion conMyCompanytion, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConMyCompanytion conMyCompanytion, IReadOnlyDictionary`2 parameterValues) at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion conMyCompanytion) --- End of inner exception stack trace --- at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion conMyCompanytion) at Microsoft.EntityFrameworkCore.Update.Internal.MySqlBatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConMyCompanytion conMyCompanytion) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList`1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) at Abp.EntityFrameworkCore.AbpDbContext.SaveChanges() in D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\AbpDbContext.cs:line 198 at Abp.Zero.EntityFrameworkCore.AbpZeroCommonDbContext`3.SaveChanges() in D:\Github\aspnetboilerplate\src\Abp.ZeroCore.EntityFrameworkCore\Zero\EntityFrameworkCore\AbpZeroCommonDbContext.cs:line 154 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.AddLanguageIfNotExists(ApplicationLanguage language) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 59 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.CreateLanguages() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 47 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.Create() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 40 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.InitialHostDbBuilder.Create() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\InitialHostDbBuilder.cs:line 15 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(MyProjectDbContext context) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 25 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver iocResolver, Action`1 contextAction) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 41 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(IIocResolver iocResolver) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 17 at MyCompany.MyProject.EntityFrameworkCore.MyProjectEntityFrameworkModule.PostInitialize() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\MyProjectEntityFrameworkModule.cs:line 46 at System.Collections.Generic.List`1.ForEach(Action`1 action) at Abp.AbpBootstrapper.Initialize() in D:\Github\aspnetboilerplate\src\Abp\AbpBootstrapper.cs:line 155
Exception is in file DefaultLanguagesCreator.cs:
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Abp.Localization;
namespace MyCompany.MyProject.EntityFrameworkCore.Seed.Host
{
public class DefaultLanguagesCreator
{
public static List<ApplicationLanguage> InitialLanguages => GetInitialLanguages();
private readonly SparDbContext _context;
private static List<ApplicationLanguage> GetInitialLanguages()
{
return new List<ApplicationLanguage>
{
new ApplicationLanguage(null, "en", "English", "famfamfam-flags gb"),
new ApplicationLanguage(null, "ar", "???????", "famfamfam-flags sa"),
new ApplicationLanguage(null, "de", "German", "famfamfam-flags de"),
new ApplicationLanguage(null, "it", "Italiano", "famfamfam-flags it"),
new ApplicationLanguage(null, "fr", "Français", "famfamfam-flags fr"),
new ApplicationLanguage(null, "pt-BR", "Portuguese", "famfamfam-flags br"),
new ApplicationLanguage(null, "tr", "Türkçe", "famfamfam-flags tr"),
new ApplicationLanguage(null, "ru", "???????", "famfamfam-flags ru"),
new ApplicationLanguage(null, "zh-CN", "????", "famfamfam-flags cn"),
new ApplicationLanguage(null, "es-MX", "Español México", "famfamfam-flags mx"),
new ApplicationLanguage(null, "nl", "Nederlands", "famfamfam-flags nl"),
new ApplicationLanguage(null, "ja", "???", "famfamfam-flags jp")
};
}
public DefaultLanguagesCreator(SparDbContext context)
{
_context = context;
}
public void Create()
{
CreateLanguages();
}
private void CreateLanguages()
{
foreach (var language in InitialLanguages)
{
AddLanguageIfNotExists(language);
}
}
private void AddLanguageIfNotExists(ApplicationLanguage language)
{
if (_context.Languages.IgnoreQueryFilters().Any(l => l.TenantId == language.TenantId && l.Name == language.Name))
{
return;
}
_context.Languages.Add(language);
_context.SaveChanges();
}
}
}
It is giving exception for Arabic language.
Thanks, @Dalton, and @Lajos for your suggestions, It has really helped in solving the issue.
I have found the solution with the help of your suggestions. This is not EF Core issue, It is the default collation configured in my MySql. So you have to change your default collation on your database. I had latin1 - default collation" in the database, which is not useful for inserting Unicode and non-English word(s), Please run the below query to change the collation of all the tables of your database.
SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` convert to character set utf8 collate utf8_unicode_ci;") AS mySQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="<YouDatabaseName>"
AND TABLE_TYPE="BASE TABLE"
If you don't want to run this query in MySQL, then you can add the above script in the code migration.