Как обновить базу данных родительского класса и тип класса атрибута [Owned] в Entity Framework Core 8.0.8C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить базу данных родительского класса и тип класса атрибута [Owned] в Entity Framework Core 8.0.8

Сообщение Anonymous »

Как сохранить данные класса атрибута [Owned] из родительского класса в базе данных.
Это родительский класс:

Код: Выделить всё

[Index(nameof(EmailId),IsUnique =true)]
public class User : Entity, IUser
{
[Required(ErrorMessage ="First Name is required."), MaxLength(20),MinLength(1)]
[DisplayName("First Name")]
public string FirstName { get; set; } = string.Empty;

[DisplayName("Last Name")]
[Required(ErrorMessage ="Last Name is required."), MaxLength(20),MinLength(1)]
public string LastName { get; set; } = string.Empty;

[DisplayName("Email Address")]
[Required(ErrorMessage = "Email Id is required"), MaxLength(50), MinLength(5)]
[DataType(DataType.EmailAddress)]
public string EmailId { get; set; } = string.Empty;

[JsonIgnore]
[DisplayName("Password"),MaxLength(200), MinLength(8),DataType(DataType.Password)]
public string? Password { get; set; }

[JsonIgnore]
public List RefreshTokens { get; set; }
}
А это структура RefreshToken дочернего класса

Код: Выделить всё

[Owned]
public class RefreshToken
{
[Key]
[JsonIgnore]
public Guid Id { get; set; }= Guid.NewGuid();
public string Token { get; set; }
public DateTime Expires { get; set; }
public DateTime Created { get; set; }
public string CreatedByIp { get; set; }
public DateTime? Revoked { get; set; }
public string RevokedByIp { get;set; }
public string ReplacedByToken { get; set; }
public string ReasonRevoked { get; set; }
public Boolean IsExpired => DateTime.UtcNow >= Expires;
public bool IsRevoked => Revoked != null;
public bool IsActive => !IsRevoked && !IsExpired;
}
Вот код: я пытаюсь сохранить родительский элемент со значениями токена обновления:

Код: Выделить всё

_unitOfWork.BeginTransaction();

User? _user = GetByEmailId(model.EmailId).FirstOrDefault();

// return null if user not found
if (_user == null)
throw new AppException("Username or password is incorrect");

if (_user.Password != model.Password.Hash())
throw new AppException("Username or password is incorrect");

// authentication successful so generate jwt token
var token = _jwtUtils.GenerateJwtToken(_user);
var _refreshtoken = _jwtUtils.GenerateRefreshToken(ipAddress);

_user.RefreshTokens.Add(_refreshtoken);

// remove old refresh token
removeOldRefreshTokens(_user);

apiResponse = _unitOfWork.Repository().Update(_user);
_unitOfWork.SaveChange();
_unitOfWork.CommitTransaction();
При сохранении я получаю сообщение об ошибке:

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: ожидалось, что операция базы данных влияет на 1 строку(и), но фактически затрагивает 0 строк;

Токен обновления добавляется в коллекцию таблицы пользователей, но при сохранении пользователя table Я получаю сообщение об ошибке
введите здесь описание изображения
Ниже приведен код для удаленияOldRefreshToken и обновления для справки:

Код: Выделить всё

private void removeOldRefreshTokens(User user)
{
// remove old inactive refresh tokens from user based on TTL in app settings
user.RefreshTokens.RemoveAll(x =>
!x.IsActive &&
x.Created.AddDays(_appSettings.RefreshTokenTTL) 

Подробнее здесь: [url]https://stackoverflow.com/questions/79007879/how-to-update-database-of-parent-class-and-owned-attribute-class-type-in-entit[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»