Параметры массовой вставки - PullRequest
0 голосов
/ 24 марта 2020

У меня есть список пользователей, которых я хочу импортировать в мое приложение с помощью файла 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);
     }
 }

Какие еще есть варианты?

1 Ответ

0 голосов
/ 24 марта 2020
  1. Вы должны создать список ApplicationUsers
  2. Не забудьте установить следующие поля, кроме тех, которые вы устанавливаете выше

PasswordHa sh = hasher. HashPassword (new ApplicationUser (), "RandomPassword");

Id = Guid.NewGuid (). ToString ();

SecurityStamp = Guid.NewGuid (). ToString ();

Здесь хэшер следующий: не вставляйте хеш-код из вставки l oop и используйте хеш-код в l oop для установки каждого объекта пользователя

var hasher = new PasswordHasher<ApplicationUser>();
Массовая вставка с использованием Context.AddRange (listOfUsers) Элемент списка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...