如何防止EF从插入添加一个包含这第一个时已经存在的数据库对象?(How can I prevent

2019-07-01 16:06发布

这是相当自我explainatory。 我有一个包含一个类另一个让我们称他们为主题和课堂

public class Subject
{
   public Classroom Class {get; set;}
}

我使用的是无状态的外墙,至极意味着我的DbContext正在复苏的对象后立即设置,并创建存储新的。 难道不应该知道课堂是不是一个新的对象,因为它的ID已经在DB? 使用调试器,我可以追踪到之前,我调用SaveChanges方法和Classroom.id是一个我在数据库上的点。 有什么问题? EF增加了一个新的课堂与确切属性与前一个,而是一个新的PK。 我在做什么错在这里?

这是用于一般的CRUD操作的代码(他们在我的DbContext)两个更新和删除工作就好了:

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

Answer 1:

没有看到你你怎么是要么更新或创建您的实际代码Subject的实体,这很难说。 然而,你可能不重视课堂所以EF是假设实体是新的,当它真的不是。

     using (Model m = new Model())
     {
        m.Subject.Add(subject);
        m.Classrooms.Attach(subject.Class);
        m.SaveChanges();           
     }

虽然PK是一样的,不附加到的背景下,英孚已经没有搞清楚你在做什么意图的方式。 附加实体明确地告诉你希望你的背景。



文章来源: How can I prevent EF from inserting an object that already exists in the db when adding one that contains this first one?