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();
    }

questionAnswers(1)

yourAnswerToTheQuestion