У меня есть список пользователей, которых я хочу импортировать в мое приложение с помощью файла Excel.
Этот процесс включает несколько таблиц, а именно: пользователи, роли, PasswordPolicy, цитаты, типы документов
В настоящее время процесс выглядит следующим образом:
Когда я загружаю свой Excel, он читает и заполняет список пользовательских объектов. Этот список затем возвращается, а затем передается в другую функцию, в которой я создаю Roles, PasswordPolicy, Quotations и DocumentTypes.
Так я обычно создаю 1 пользователя
var applicationUser = new User
{
FirstName = StripTags.Strip(Input.FirstName),
LastName = StripTags.Strip(Input.LastName),
UserName = StripTags.Strip(Input.UserName),
Email = StripTags.Strip(Input.Email),
PhoneNumber = StripTags.Strip(Input.PhoneNumber),
DateOfBirth = Input.DateOfBirth,
NormalizedUserName = Input.UserName.ToUpper(),
NormalizedEmail = Input.Email.ToUpper()
};
var result = _userManager.CreateAsync(applicationUser, Input.Password);
if (result.Result.Succeeded)
{
return applicationUser;
}
else
{
return null;
}
Однако проблема в том, что в моем входном Excel только 1000 строк, это может занять более 20 минут.
Я пытаюсь найти параметр «Массовая вставка» для других моих таблиц, чтобы ускорить его, но пока я нашел только одно решение, которое является платным.
Я использую MySQL. Существует ли какая-либо библиотека efcore для массовой вставки. net core 2.2?
Я также пытался использовать метод SqlBulkCopy, но получаю исключение о том, что
Ключевое слово 'port' не поддерживается
Это такое метод sqlbulkcopy
var cp = new[] {
nameof(UserDocumentCategory.Id),
nameof(UserDocumentCategory.DocumentCategoryId),
nameof(UserDocumentCategory.UserId),
nameof(UserDocumentCategory.TenantId),
};
using(var sqlCopy = new SqlBulkCopy("server=localhost;port=3306;database=AppOne;user=root;password="")
{
sqlCopy.DestinationTableName = "[UserDocumentCategory]";
sqlCopy.BatchSize = 1000;
using(var reader = ObjectReader.Create(Input,cp))
{
sqlCopy.WriteToServer(reader);
}
}
Какие еще есть варианты?