Базовый метод AddRange () Entity Framework, оставляя пустые столбцы - PullRequest
0 голосов
/ 16 января 2019

Я использую Entity Framework Core. Я создаю большое количество объектов, а именно пользователей, и добавляю этих пользователей в свою базу данных.

Шаги следующие:

  1. Создать объект User
  2. Заполнить некоторые пользовательские поля данными
  3. Добавить пользователя к List<User>
  4. _context.Users.AddRange(usersList)
  5. _context.SaveChanges()

Это код:

User currentUser = currentUserToValidate.ToModel<User>();

currentUser.Tenant = tenant;
currentUser.CreatedOn = DateTime.UtcNow;
currentUser.LastLogOn = DateTime.MinValue;
currentUser.LastLogOnAttempt = DateTime.MinValue;
currentUser.SecurityStamp = NewSecurityStamp();

if (string.IsNullOrEmpty(currentUserToValidate.Password))
{
    currentUserToValidate.Password = PasswordGenerator.Generate(tenant.PasswordPolicy.MinimumPasswordLength);
}

string aesPassword = AESHelper.EncryptString(currentUserToValidate.Password);
currentUser.AESPassword = aesPassword;

if (string.IsNullOrEmpty(currentUser.UserName))
{
    currentUser.UserName = currentUser.Email;
}

var hPwd = new PasswordHasher<User>().HashPassword(currentUser, currentUserToValidate.Password);

currentUser.PasswordHash = hPwd;

concurrentAddValidUsers(validUsers, currentUser);

Тогда

public async Task CreateBatch(List<User> usersToAdd, List<PasswordHistory> passwordHistories)
{
    try
    {
        int number = usersToAdd.Count(user => user.CreatedOn == null || string.IsNullOrEmpty(user.PasswordHash));
        _context.Users.AddRange(usersToAdd);
        _context.PasswordHistory.AddRange(passwordHistories);

        _context.SaveChanges();
    }
    catch (Exception e)
    {
        _logger.LogError(e, "error");
        throw;
    }
}

Я даже проверяю, есть ли пустые значения перед добавлением в базу данных, но их нет. Даже при отладке я вижу, что объекты заполнены.

enter image description here

Как видно на картинке, в столбце «LastLogon» есть несколько пользователей с пустыми полями. И это не единственное поле.

Почему это происходит и как я могу решить эту проблему?

РЕДАКТИРОВАТЬ: Я обнаружил, что проблема намного страннее, чем я, хотя. Для каждого пользователя, которого я хочу вставить, EF вставляет новую запись, все столбцы будут пустыми. Итак, если я хочу вставить 10 пользователей, эти 10 пользователей вставляются, но остальные 10 записей вставляются в таблицу пользователей со всеми столбцами пустыми или нулевыми. Все еще не выяснил проблему ...

...