EF 添加新记录而不是更新记录

EF adding new record instead of updating record

下面是我在数据库中添加新记录的代码。我正在使用 EF Core。

在我的代码中,我首先检查数据库中是否存在现有的用户 ID 数据,如果有数据则应该更新记录,否则应该创建。

但我的问题是每次它都添加新记录而不是更新现有记录。对此有任何想法。

下面是我的代码:

public async Task<int> Create(UserPreference _object)
        {
            var userPreferenceDetails = applicationDbContext.UserPreferences.Where(x => 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();
            }
        }

试试这个

if(_object.UserId > 0)
{
    var userPreferenceDetails = applicationDbContext.UserPreferences.Where(x => 
    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;
 }