8
I am trying to persist a change I make to a record but am getting this error:
System.Invalidoperationexception: 'A referential Integrity Constraint Violation occurred: The Property value(s) of 'Unidadedemedida.Undmedidaid' on one end of a Relationship do not match the Property value(s) of 'Product.Unidademedidaid' on the other end.'
I am using the Entity Framework with Fluent API. The Produto
with UnidadeMedida
is *:1
.
I 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 get the assignments correctly, but I see that when it arrives in this piece of code
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 unit reference measure is void. I can’t imagine why...
My Class Product
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 class Productoviewmodel
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 explain the pq of this error.
Check that your classes (Productoviewmodel and Product>) are exactly equal in property relations and the Product class is correct in the context class. Also check the relationship of tables, I believe that when trying to save the unit of measure Entity is not understanding the property Unidademedidaid and Undmedidaid. I hope I helped the idea.
– Heber Nickison Pietrafeza
Could put your Product and Product class?
– joaoeduardorf
Coming filled the productViewModel.Undidademedidaid?
– joaoeduardorf
@joaoeduardorf I saw that I get the correct values from the View, but when I get to the class that tries the Update and it gives that error that I reported upstairs.
– Iago Frota