撤消DbContext.Add()

时间:2013-06-11 06:00:15

标签: c# .net entity-framework dbcontext undo

我遇到问题,我使用_db.Article.Add(artícle)向我的DbContext添加了一个实体,但是在我执行_db.SaveChanges之前想要删除它。

我没有找到任何东西,但我试图使用_db.ChangeTracker遗憾的是还没有搞清楚。更多_db.Entry(article).State = EntityState.Deleted_db.Article.Remove(article)也不起作用,因为该实体尚未在数据库中...

是否有可能将其从更改列表中删除?

2 个答案:

答案 0 :(得分:1)

您可以利用DbContext.IObjectContextAdapter.ObjectContext的显式实现来获取您的实体的基础ObjectContextDetach,例如;

((IObjectContextAdapter)_db).ObjectContext.Detach(article);

语法更清晰的方法是使用方法扩展DbContext;

public class MyDbContext : DbContext 
{
    public void Detach(object entity) { ObjectContext.Detach(entity); }
}

...这将允许你简单地做;

_db.Detach(article);

答案 1 :(得分:1)

删除工作正常,以下不会在SQL中产生任何更改(没有插入或删除语句)

class Program
{
    static void Main(string[] args)
    {
        using (var ctx = new MyContext())
        {
            var entity = new MyEntity();

            ctx.MyEntities.Add(entity);
            ctx.MyEntities.Remove(entity);

            ctx.SaveChanges();
        }
    }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
}

public class MyEntity
{
    public int Id { get; set; }
}

这是因为在EF中的savechanges调用之前不会生成SQL。直到此时,EF才会评估整个图形并保持与其初始快照不匹配的更改到数据库。