【问题标题】:Entity Framework Remove vs State.Deleted实体框架删除与 State.Deleted
【发布时间】:2016-02-15 22:32:04
【问题描述】:

简单明了, 有什么区别

DbSet().Remove(x)

context.Entry(x).State = State.Deleted?

谢谢

【问题讨论】:

标签: c# ef-code-first entity-framework-6


【解决方案1】:

我不能说,删除的 MSDN 文章说

将给定实体标记为已删除,以便在调用 SaveChanges 时将其从数据库中删除。请注意,在调用此方法之前,实体必须以其他状态存在于上下文中。

.Remove 可能只是删除项目的首选方式。

编辑:

此外,EntityState 的 MSDN 文章说这是删除。

实体正在被上下文跟踪并存在于数据库中,但已被标记为在下次调用 SaveChanges 时从数据库中删除。

这进一步巩固了它们实际上是同一件事。

【讨论】:

  • 为了删除一个项目,它必须被加载到缓存中,对吗?即使知道钥匙也没有这种东西可以删除,对吗?
  • 是的,他们都希望实体存在,但是第二种方法,如果与 linq 表达式一起使用,可以用于尝试将实体设置为已删除(即使它没有存在,因为 linq 会一无所获)
  • 一个不同之处是,如果您在EntityState.Added 的实体上设置EntityState.Deleted,那么当您尝试保存更改时,它会出现异常,因为它尝试删除的记录已经不存在。但是Remove 会将其更改为Detached。听起来Remove 也尝试处理包含实体上的外键? forums.asp.net/t/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2014-12-20
相关资源
最近更新 更多