При попытке обновить объект Advert у меня возникла ошибка параллелизма. Я делаю что-то не так?
Контекст: каждое объявление должно содержать одну или несколько фотографий. И моя логика такая: когда фронт присылает новые изображения, я удаляю старые и добавляю новые.
Я делаю что-то не так?
Вот мой код.
public async Task Update(AdvertUpdateDto advertUpdateDto, Guid id) {
var response = new ResponseModel();
try {
var advert = await _context.Adverts
.Include(a => a.Opcionais)
.Include(a => a.Imagens)
.Include(a => a.Usuario)
.FirstOrDefaultAsync(a => a.Id == id);
if (advert == null) {
response.Mensagem = "Anúncio não encontrado";
return response;
}
var optionals = await _context.Optionals
.Where(opt => advertUpdateDto.Opcionais.Contains(opt.Id))
.ToListAsync();
if (optionals.Count != advertUpdateDto.Opcionais.Count) {
throw new ArgumentException("Um ou mais opcionais fornecidos não são válidos.");
}
// Atualiza propriedades básicas do anúncio
advert.Cor = advertUpdateDto.Cor;
advert.Cep = advertUpdateDto.Cep;
advert.Cidade = advertUpdateDto.Cidade;
advert.Estado = advertUpdateDto.Estado;
advert.Preco = advertUpdateDto.Preco;
advert.Portas = advertUpdateDto.Portas;
advert.Quilometragem = advertUpdateDto.Quilometragem;
advert.Descricao = advertUpdateDto.Descricao;
advert.Cambio = advertUpdateDto.Cambio;
advert.Opcionais = optionals;
// Adicionar novas fotos
var newPhotos = advertUpdateDto.Imagens.Select(img => new Photo(img.Url, img.Chave)).ToList();
advert.Imagens = newPhotos;
// Salva as alterações no banco de dados
await _context.SaveChangesAsync();
var result = new AdvertDto {
AnoModelo = advert.AnoModelo,
Cambio = advert.Cambio,
Condicao = advert.Condicao,
Cidade = advert.Cidade,
Cep = advert.Cep,
Cor = advert.Cor,
DataAtualizacao = advert.DataAtualizacao,
DataCricao = advert.DataCricao,
Descricao = advert.Descricao,
Destaque = advert.Destaque,
Estado = advert.Estado,
Id = advert.Id,
Marca = advert.Marca,
Placa = advert.Placa,
Modelo = advert.Modelo,
Portas = advert.Portas,
Preco = advert.Preco,
Tipo = advert.Tipo,
Quilometragem = advert.Quilometragem,
Slug = advert.Slug,
Opcionais = advert.Opcionais.Select(opt => new OptionalDto { Name = opt.Nome }).ToList(),
Imagens = advert.Imagens.Select(img => new PhotoDto { Chave = img.Chave, Url = img.Url }).ToList(),
Usuario = new AdvertUserDto {
Id = advert.Usuario.Id,
Nome = advert.Usuario.Nome,
Email = advert.Usuario.Email,
Imagem = advert.Usuario.Imagem,
Sobrenome = advert.Usuario.Sobrenome,
Telefone = advert.Usuario.Telefone
},
UsuarioId = advert.UsuarioId
};
response.Dados = result;
} catch (DbUpdateConcurrencyException ex) {
Console.WriteLine(ex.ToString());
response.Mensagem = "Concurrency error";
} catch (Exception){
response.Mensagem = "Advert Update error";
}
return response;
}
public sealed class Advert
{
[Key] public Guid Id { get; set; }
public string Tipo { get; set; }
public string Marca { get; set; }
public string Modelo { get; set; }
public int AnoModelo { get; set; }
public string Cor { get; set; }
public string Cep { get; set; }
public string Cidade { get; set; }
public string Estado { get; set; }
public int Preco { get; set; }
public string Portas { get; set; }
public int Quilometragem { get; set; }
public string Descricao { get; set; }
public string Placa { get; set; }
public string Cambio { get; set; }
[DataType(DataType.DateTime)] public DateTime DataCricao { get; set; } = DateTime.UtcNow;
[DataType(DataType.DateTime)] public DateTime? DataAtualizacao { get; set; }
public Condition Condicao { get; set; } = Condition.REQUESTED;
public string Slug { get; set; }
public bool? Destaque { get; set; }
public Guid? UsuarioId { get; set; }
public User Usuario { get; set; }
public List? Imagens { get; set; }
public List? Opcionais { get; set; }
[ConcurrencyCheck] public Guid Version { get; set; }
private Advert() {}
public Advert(string tipo, string marca, string modelo, int anoModelo, string cor, string cep,
string cidade, string estado, int preco, string portas, int quilometragem, string descricao, string placa,
string cambio, DateTime dataAtualizacao, Condition condicao, string slug, bool? destaque, Guid? usuarioId,
User usuario,
List? imagens, List? opcionais)
{
Id = Guid.NewGuid();
Tipo = tipo;
Marca = marca;
Modelo = modelo;
AnoModelo = anoModelo;
Cor = cor;
Cep = cep;
Cidade = cidade;
Estado = estado;
Preco = preco;
Portas = portas;
Quilometragem = quilometragem;
Descricao = descricao;
Placa = placa;
Cambio = cambio;
DataAtualizacao = dataAtualizacao;
Condicao = condicao;
Slug = slug;
Destaque = destaque;
UsuarioId = usuarioId;
Usuario = usuario;
Imagens = imagens;
Opcionais = opcionais;
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -framework
Ошибка параллелизма в .net. Структура сущностей SQL Server ⇐ C#
Место общения программистов C#
-
Anonymous
1732395592
Anonymous
При попытке обновить объект Advert у меня возникла ошибка параллелизма. Я делаю что-то не так?
Контекст: каждое объявление должно содержать одну или несколько фотографий. И моя логика такая: когда фронт присылает новые изображения, я удаляю старые и добавляю новые.
Я делаю что-то не так?
Вот мой код.
public async Task Update(AdvertUpdateDto advertUpdateDto, Guid id) {
var response = new ResponseModel();
try {
var advert = await _context.Adverts
.Include(a => a.Opcionais)
.Include(a => a.Imagens)
.Include(a => a.Usuario)
.FirstOrDefaultAsync(a => a.Id == id);
if (advert == null) {
response.Mensagem = "Anúncio não encontrado";
return response;
}
var optionals = await _context.Optionals
.Where(opt => advertUpdateDto.Opcionais.Contains(opt.Id))
.ToListAsync();
if (optionals.Count != advertUpdateDto.Opcionais.Count) {
throw new ArgumentException("Um ou mais opcionais fornecidos não são válidos.");
}
// Atualiza propriedades básicas do anúncio
advert.Cor = advertUpdateDto.Cor;
advert.Cep = advertUpdateDto.Cep;
advert.Cidade = advertUpdateDto.Cidade;
advert.Estado = advertUpdateDto.Estado;
advert.Preco = advertUpdateDto.Preco;
advert.Portas = advertUpdateDto.Portas;
advert.Quilometragem = advertUpdateDto.Quilometragem;
advert.Descricao = advertUpdateDto.Descricao;
advert.Cambio = advertUpdateDto.Cambio;
advert.Opcionais = optionals;
// Adicionar novas fotos
var newPhotos = advertUpdateDto.Imagens.Select(img => new Photo(img.Url, img.Chave)).ToList();
advert.Imagens = newPhotos;
// Salva as alterações no banco de dados
await _context.SaveChangesAsync();
var result = new AdvertDto {
AnoModelo = advert.AnoModelo,
Cambio = advert.Cambio,
Condicao = advert.Condicao,
Cidade = advert.Cidade,
Cep = advert.Cep,
Cor = advert.Cor,
DataAtualizacao = advert.DataAtualizacao,
DataCricao = advert.DataCricao,
Descricao = advert.Descricao,
Destaque = advert.Destaque,
Estado = advert.Estado,
Id = advert.Id,
Marca = advert.Marca,
Placa = advert.Placa,
Modelo = advert.Modelo,
Portas = advert.Portas,
Preco = advert.Preco,
Tipo = advert.Tipo,
Quilometragem = advert.Quilometragem,
Slug = advert.Slug,
Opcionais = advert.Opcionais.Select(opt => new OptionalDto { Name = opt.Nome }).ToList(),
Imagens = advert.Imagens.Select(img => new PhotoDto { Chave = img.Chave, Url = img.Url }).ToList(),
Usuario = new AdvertUserDto {
Id = advert.Usuario.Id,
Nome = advert.Usuario.Nome,
Email = advert.Usuario.Email,
Imagem = advert.Usuario.Imagem,
Sobrenome = advert.Usuario.Sobrenome,
Telefone = advert.Usuario.Telefone
},
UsuarioId = advert.UsuarioId
};
response.Dados = result;
} catch (DbUpdateConcurrencyException ex) {
Console.WriteLine(ex.ToString());
response.Mensagem = "Concurrency error";
} catch (Exception){
response.Mensagem = "Advert Update error";
}
return response;
}
public sealed class Advert
{
[Key] public Guid Id { get; set; }
public string Tipo { get; set; }
public string Marca { get; set; }
public string Modelo { get; set; }
public int AnoModelo { get; set; }
public string Cor { get; set; }
public string Cep { get; set; }
public string Cidade { get; set; }
public string Estado { get; set; }
public int Preco { get; set; }
public string Portas { get; set; }
public int Quilometragem { get; set; }
public string Descricao { get; set; }
public string Placa { get; set; }
public string Cambio { get; set; }
[DataType(DataType.DateTime)] public DateTime DataCricao { get; set; } = DateTime.UtcNow;
[DataType(DataType.DateTime)] public DateTime? DataAtualizacao { get; set; }
public Condition Condicao { get; set; } = Condition.REQUESTED;
public string Slug { get; set; }
public bool? Destaque { get; set; }
public Guid? UsuarioId { get; set; }
public User Usuario { get; set; }
public List? Imagens { get; set; }
public List? Opcionais { get; set; }
[ConcurrencyCheck] public Guid Version { get; set; }
private Advert() {}
public Advert(string tipo, string marca, string modelo, int anoModelo, string cor, string cep,
string cidade, string estado, int preco, string portas, int quilometragem, string descricao, string placa,
string cambio, DateTime dataAtualizacao, Condition condicao, string slug, bool? destaque, Guid? usuarioId,
User usuario,
List? imagens, List? opcionais)
{
Id = Guid.NewGuid();
Tipo = tipo;
Marca = marca;
Modelo = modelo;
AnoModelo = anoModelo;
Cor = cor;
Cep = cep;
Cidade = cidade;
Estado = estado;
Preco = preco;
Portas = portas;
Quilometragem = quilometragem;
Descricao = descricao;
Placa = placa;
Cambio = cambio;
DataAtualizacao = dataAtualizacao;
Condicao = condicao;
Slug = slug;
Destaque = destaque;
UsuarioId = usuarioId;
Usuario = usuario;
Imagens = imagens;
Opcionais = opcionais;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79218819/concurrency-error-in-net-sql-sever-entity-framework[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия