I have the following scenario that I'm having problem:
Category:
public class Categoria
{
public int Id { get; set; }
public string Descricao { get; set; }
public virtual ICollection<Produto> Produtos { get; set; }
}
Product:
public class Produto
{
public int Id { get; set; }
public string Descricao { get; set; }
public string Detalhes { get; set; }
public double Preco { get; set; }
public bool Disponivel { get; set; }
public int CategoriaId { get; set; }
public virtual Categoria Categoria { get; set; }
public virtual ICollection<Cliente> Clientes { get; set; }
}
Settings with Fluent Api:
public class CategoriaConfig : EntityTypeConfiguration<Categoria>
{
public CategoriaConfig()
{
ToTable("Categoria");
HasKey(x => x.Id);
Property(x => x.Descricao).IsRequired().HasMaxLength(100);
HasMany(x => x.Produtos);
}
}
public class ProdutoConfig : EntityTypeConfiguration<Produto>
{
public ProdutoConfig()
{
ToTable("Produto");
HasKey(x => x.Id);
Property(x => x.Descricao).IsRequired().HasMaxLength(100);
Property(x => x.Detalhes).IsRequired().HasMaxLength(100);
Property(x => x.Preco).IsRequired();
HasMany(x => x.Clientes);
HasRequired(x => x.Categoria);
}
}
Method to add the product (where you are generating the error):
public void Adicionar(Produto produto)
{
_db.Entry(produto.Categoria).State = EntityState.Unchanged;
_db.Set<Produto>().Add(produto);
_db.SaveChanges();
}
The way the object is being passed to the Add method:
MyAction:
publicActionResultCreate(ProdutoViewModelproduto){if(ModelState.IsValid){varprodutoDomain=MapearParaDomainModel(produto);produtoDomain.Categoria=_categoriaApp.ObterPorId(produto.CategoriaId);_produtoApp.Adicionar(produtoDomain);returnRedirectToAction("Index");
}
return null;
}
Error Message:
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
As I'm adding the product, there's no need to look for the category to put on the object, and then I've removed the line "productDomain.Category = ..." from the action and also removed the line "_db.Entry (product. Category) ... "of the write method, the error continues however the type is not specified.