Como posso evitar que o EF insira um objeto que já existe no banco de dados ao adicionar um que contenha este primeiro?
É bastante autoexplicativo. Eu tenho uma classe que contém outro Vamos chamá-los de Assunto e Sala de Aula
public class Subject
{
public Classroom Class {get; set;}
}
Estou usando fachadas sem estado, o que significa que meu DbContext é descartado logo após recuperar os objetos e é criado para armazenar os novos. Não deveria saber que o Google Sala de aula não é um novo objeto, já que seu ID já está no banco de dados? Usando o depurador, posso rastrear até o ponto correto antes de chamar o método SaveChanges e o Classroom.id é o que eu tenho no banco de dados. Qual é o problema? A EF adiciona um novo Google Sala de aula com as propriedades exatas como a anterior, mas com um novo PK. O que eu estou fazendo errado aqui?
Este é o código usado para as operações CRUD gerais (Eles estão no meu DbContext) Ambos atualizar e excluir o trabalho muito bem:
public void Update(DbSet MySet, object Obj)
{
MySet.Attach(Obj);
var Entry = this.Entry(Obj);
Entry.State = EntityState.Modified;
this.SaveChanges();
}
public void Insert(DbSet MySet, object Obj)
{
MySet.Add(Obj);
this.SaveChanges();
}
public void Delete(DbSet MySet, object Obj)
{
MySet.Attach(Obj);
var Entry = this.Entry(Obj);
Entry.State = EntityState.Deleted;
this.SaveChanges();
}