1

我有一个问题,我已经使用 向我的 DbContext 添加了一个实体_db.Article.Add(artícle),但是想在执行之前撤消这个_db.SaveChanges

我还没有找到任何东西,但是我很遗憾地尝试使用_db.ChangeTracker它还没有弄清楚。更多_db.Entry(article).State = EntityState.Deleted或者_db.Article.Remove(article)也不会工作,因为实体还没有在数据库中......

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

4

2 回答 2

1

您可以利用DbContext.IObjectContextAdapter.ObjectContext的显式实现来获取底层ObjectContext分离您的实体,例如;

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

一种语法更简洁的方法是使用方法扩展您的 DbContext;

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

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

_db.Detach(article);
于 2013-06-11T06:20:44.157 回答
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 才评估整个图形并保留与其初始快照不匹配的更改到数据库。

于 2013-06-11T06:24:50.637 回答