EF добавление новой записи вместо обновления записи

#c# #.net #entity-framework #asp.net-core #entity-framework-core

#c# #.net #структура организации #asp.сетевое ядро #сущность-структура-ядро

Вопрос:

Ниже приведен мой код для добавления новых записей в БД. Я использую ядро EF.

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

Но моя проблема в том, что каждый раз, когда он добавляет новую запись вместо обновления существующей … любая идея по этому поводу.

Ниже приведен мой код :

 public async Tasklt;intgt; Create(UserPreference _object)  {  var userPreferenceDetails = applicationDbContext.UserPreferences.Where(x =gt; x.UserId == _object.UserId).FirstOrDefault();   if(userPreferenceDetails != null)  {  if (_object.Image != null)  {  var webRootPath = hostingEnv.WebRootPath;  var fileName = Path.GetFileName(_object.Image.FileName);  var filePath = Path.Combine(hostingEnv.WebRootPath, "images\User", fileName);   using (var fileStream = new FileStream(filePath, FileMode.Create))  {  await _object.Image.CopyToAsync(fileStream);  }   userPreferenceDetails.ImagePath = filePath;  //_object.ImagePath = filePath;  }   userPreferenceDetails.Name = _object.Name;  userPreferenceDetails.Location = _object.Location;  userPreferenceDetails.DateOfBirth = _object.DateOfBirth;  userPreferenceDetails.AboutMe = _object.AboutMe;  userPreferenceDetails.MatchPreference = _object.MatchPreference;  userPreferenceDetails.PlayScore = _object.PlayScore;  userPreferenceDetails.LocationPreference = _object.LocationPreference;   var obj = applicationDbContext.UserPreferences.Update(_object);  return applicationDbContext.SaveChanges();  } else  {  if (_object.Image != null)  {  var webRootPath = hostingEnv.WebRootPath;  var fileName = Path.GetFileName(_object.Image.FileName);  var filePath = Path.Combine(hostingEnv.WebRootPath, "images\User", fileName);   using (var fileStream = new FileStream(filePath, FileMode.Create))  {  await _object.Image.CopyToAsync(fileStream);  }   _object.ImagePath = filePath;  }   var obj = await applicationDbContext.UserPreferences.AddAsync(_object);  return applicationDbContext.SaveChanges();  }  }  

Ответ №1:

попробуйте это

 if(_object.UserId gt; 0) {  var userPreferenceDetails = applicationDbContext.UserPreferences.Where(x =gt;   x.UserId == _object.UserId).FirstOrDefault();   if(userPreferenceDetails == null) return 0;   if (_object.Image != null)  {  ....your code  }   userPreferenceDetails.Name = _object.Name;  userPreferenceDetails.Location = _object.Location;  userPreferenceDetails.DateOfBirth = _object.DateOfBirth;  userPreferenceDetails.AboutMe = _object.AboutMe;  userPreferenceDetails.MatchPreference = _object.MatchPreference;  userPreferenceDetails.PlayScore = _object.PlayScore;  userPreferenceDetails.LocationPreference = _object.LocationPreference;  }  else {  if (_object.Image != null)  {  ...your code  }   applicationDbContext.UserPreferences.Add(_object);  }  var result= await applicationDbContext.SaveChangesAsync();  return result;  }