代码之家  ›  专栏  ›  技术社区  ›  KallDrexx

如何判断EF4实体是新记录还是现有记录?

  •  5
  • KallDrexx  · 技术社区  · 15 年前

    对于我的大多数实体来说,这很容易确定,因为 Int

    对于如何确定实体的实例是新的还是对现有记录的更新,有人有什么建议吗?

    编辑 :我忘了提到,这些实体是先为代码构建的poco,因此实体本身没有EntityState属性。

    2 回复  |  直到 15 年前
        1
  •  6
  •   RPM1984    15 年前

    是的,正如上面的答案所述,您可以检查 对于OSM中的实体。

    但是,请记住,这只适用于连接到上下文/图的实体。

    我目前正在使用分离实体(ASP.NET MVC),因为它们没有附加到图形,所以实体状态不变。

    应用当前值 .保存更改

    我还在想这是不是正确的方法,但我想我会把它放在那里。

    我使用的是没有变化跟踪的POCO,因此我需要做更多的工作。

    var pocosInGraph = ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
    

    附加/添加之后,您的POCO应该在该集合中。

    不过,正如我所说,如果这是针对MVC应用程序的,那么您的实体将在HTTP POST上分离,因此EntityState将保持不变。

    ctx.Attach(poco);
    ctx.ObjectStateManager.ChangeObjectState(poco, EntityState.Modified);
    ctx.SaveChanges();
    
        2
  •  3
  •   franklins    15 年前
    if (x.EntityState == System.Data.EntityState.Added)
    //Add
    else if (x.EntityState == System.Data.EntityState.Modified)
    //Attach
    

    了解更多信息

    http://msdn.microsoft.com/en-us/library/system.data.entitystate.aspx