我遇到问题,我使用_db.Article.Add(artícle)
向我的DbContext添加了一个实体,但是在我执行_db.SaveChanges
之前想要删除它。
我没有找到任何东西,但我试图使用_db.ChangeTracker
遗憾的是还没有搞清楚。更多_db.Entry(article).State = EntityState.Deleted
或_db.Article.Remove(article)
也不起作用,因为该实体尚未在数据库中...
是否有可能将其从更改列表中删除?
答案 0 :(得分:1)
您可以利用DbContext.IObjectContextAdapter.ObjectContext的显式实现来获取您的实体的基础ObjectContext和Detach,例如;
((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才会评估整个图形并保持与其初始快照不匹配的更改到数据库。