I'm trying to persist a change I make in a registry, but I'm getting this error:
System.InvalidOperationException: 'A referential integrity constraint violation occurred: The property value (s) of 'UnitMedida.UndMedidaId' on one end of a relationship do not match the property value (s) of 'Product.MedidaId' on the other end. '
I'm using the Entity Framework with Fluent API. The ratio of Produto
to UnidadeMedida
is *:1
.
I have debugged where I assign the values I receive from my view
public ProdutoViewModel Atualizar(ProdutoViewModel produtoViewModel)
{
var categoriaSelecionada =
_categoriaService.ObterPorId(produtoViewModel.CategoriaId);
var subCategoriaSelecionada =
_subCategoriaService.ObterPorId(produtoViewModel.SubCategoriaId);
var unidadeMedidaSelecionada =
_unidadeMedidaService.ObterPorId(produtoViewModel.UndidadeMedidaId);
var produto = Mapper.Map<ProdutoViewModel, Produto>(produtoViewModel);
produto.Categoria = categoriaSelecionada;
produto.SubCategoria = subCategoriaSelecionada;
produto.UnidadeMedida = unidadeMedidaSelecionada;
_produtoService.Atualizar(produto);
return produtoViewModel;
}
And I see that I get the assignments correctly , but I also see that when it arrives in that code snippet
public virtual TEntity Atualizar(TEntity obj)
{
var entry = Db.Entry(obj);
DbSet.Attach(obj);
entry.State = EntityState.Modified;
SaveChanges();
return obj;
}
I see that a measure unit reference is null. I can not imagine why ...
My Product Class
using System;
namespace K.Domain.Entities
{
public class Produto
{
public Guid ProdutoId { get; set; }
public string Descricao { get; set; }
//public DateTime? Validade { get; set; }
//public string Lote { get; set; }
public virtual Categoria Categoria { get; set; }
public virtual SubCategoria SubCategoria { get; set; }
public virtual UnidadeDeMedida UnidadeMedida { get; set; }
public Guid CategoriaId { get; set; }
public Guid SubCategoriaId { get; set; }
public Guid UnidadeMedidaId { get; set; }
//public virtual ICollection<Localizacao> Localizacao { get; set; }
//public virtual UndAdministrativa UndAdministrativa { get; set; }
//public DateTime DataCadastro { get; set; }
//public bool IsMedicamento { get; set; }
public Produto()
{
ProdutoId = Guid.NewGuid();
}
//public bool IsValid
//{
// get
// {
// return ResultadoValidacao.IsValid;
// }
//}
}
}
My ProductViewModel class
using K.Domain.Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace K.Application.ViewModels
{
public class ProdutoViewModel
{
public ProdutoViewModel()
{
ProdutoId = Guid.NewGuid();
Categorias = new List<CategoriaViewModel>();
SubCategorias = new List<SubCategoriaViewModel>();
UnidadeMedidas = new List<UnidadeDeMedidaViewModel>();
}
[Key]
public Guid ProdutoId { get; set; }
[Required(ErrorMessage = ("Preencha uma descrição."))]
[MaxLength(120, ErrorMessage = ("Máximo {0} caracteres."))]
[MinLength(1, ErrorMessage = ("Mínimo {0} caracteres."))]
[DisplayName("Descrição")]
public string Descricao { get; set; }
public IEnumerable<CategoriaViewModel> Categorias { get; set; }
public IEnumerable<SubCategoriaViewModel> SubCategorias { get; set; }
public IEnumerable<UnidadeDeMedidaViewModel> UnidadeMedidas { get; set; }
public Guid CategoriaId { get; set; }
public Guid SubCategoriaId { get; set; }
public Guid UndidadeMedidaId { get; set; }
public virtual Categoria Categoria { get; set; }
public virtual SubCategoria SubCategoria { get; set; }
public virtual UnidadeDeMedida UnidadeMedida { get; set; }
}
}
I will be very happy if someone solves and explains the pq of this error.