Я использую Entity Framework Core. Я создаю большое количество объектов, а именно пользователей, и добавляю этих пользователей в свою базу данных.
Шаги следующие:
- Создать объект User
- Заполнить некоторые пользовательские поля данными
- Добавить пользователя к
List<User>
_context.Users.AddRange(usersList)
_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;
}
}
Я даже проверяю, есть ли пустые значения перед добавлением в базу данных, но их нет. Даже при отладке я вижу, что объекты заполнены.
Как видно на картинке, в столбце «LastLogon» есть несколько пользователей с пустыми полями. И это не единственное поле.
Почему это происходит и как я могу решить эту проблему?
РЕДАКТИРОВАТЬ: Я обнаружил, что проблема намного страннее, чем я, хотя. Для каждого пользователя, которого я хочу вставить, EF вставляет новую запись, все столбцы будут пустыми. Итак, если я хочу вставить 10 пользователей, эти 10 пользователей вставляются, но остальные 10 записей вставляются в таблицу пользователей со всеми столбцами пустыми или нулевыми. Все еще не выяснил проблему ...