Entity framework 实体框架6检测新实体

Entity framework 实体框架6检测新实体,entity-framework,Entity Framework,在EntityFramework4中,我可以检查一个实体的EntityKey,如果它为null,我将创建一个新实体,而不是现有的分离实体 如何判断实体是否是实体框架6中的新实体?在EF6中,您可以通过下拉到ObjectContext获取EntityKey: (((IObjectContextAdapter)myDbContext).ObjectContext) .ObjectStateManager.GetObjectStateEntry(entity).EntityKey 最后,我使

在EntityFramework4中,我可以检查一个实体的EntityKey,如果它为null,我将创建一个新实体,而不是现有的分离实体


如何判断实体是否是实体框架6中的新实体?

在EF6中,您可以通过下拉到
ObjectContext
获取
EntityKey

(((IObjectContextAdapter)myDbContext).ObjectContext)
    .ObjectStateManager.GetObjectStateEntry(entity).EntityKey

最后,我使用上下文查看数据库,查看实体是否在数据库中

在EF6中,您应该也能做到这一点。您还可以检查实体所处的状态()。新添加的实体将处于
添加的
状态。这些实体没有我可以看到的EntityKey属性。您无法直接获取
EntityKey
,但您可以按如下方式转到
ObjectContext
((IOObjectContextAdapter)myDbContext).ObjectContext
,然后您可以像以前一样使用旧API<代码>DbContext
是目前使用EF的更为精简和首选的方式。您将如何使用DbContext检测新实体?请尝试:
var entry=myDbContext.entry(myEntity);var isNewEntity=entry!=null&&entry.State==EntityState.Added
我认为
.Entry()
如果您传递的对象未被EF跟踪,则返回null。这实际上是不正确的,它不返回null,而是返回分离的实体。在这种情况下
Entry.State==EntityState。添加的
应该足够了。我更新了帖子。不,它显示为EntityState.Distached,因此我无法判断它是否是来自该州的新帖子。抱歉,我误解了你的评论。我对此进行了更多的研究,我认为如果不直接访问
ObjectContext
,就无法获得
EntityKey