DbContext.Entry附加实体

时间:2012-10-11 03:55:00

标签: entity-framework entity-framework-5 dbcontext

从我的研究中,我读到调用DbContext.Entry(someEntity)会自动将实体附加到上下文。

然而,当我这样做时,我发现实体的状态是分离的。

任何人都可以了解这一点以及DbContect.Entry的工作原理。我使用的是EF 5.0

感谢。

2 个答案:

答案 0 :(得分:6)

如果您想要附加对象,您实际需要的是DbSet.Attach。 DbContext.Entry仅向您提供有关该实体的信息,并允许您更改已附加的状态。

这是关于来自MSDN的实体状态的good post

答案 1 :(得分:0)

由于@Mark Oreta的答案未完成:

在他发布的link之后阅读整个帖子后发现了一些不同的信息:所以如果你设置了你需要的相关EntityState,那么DbContext.Entry(someEntity)实际上是将实体附加到上下文。

要附加修改或添加的实体,您可以执行以下操作:

using(var yourDbContext = new YourDbContext())
{
    yourDbContext.Entry(yourEntity).State =
        yourEntity.ID == 0 ?
            System.Data.Entity.EntityState.Added :
            System.Data.Entity.EntityState.Modified;
}

要附加未经修改的实体,您可以这样做:

using(var yourDbContext = new YourDbContext())
{
    yourDbContext.Entry(yourEntity).State = System.Data.Entity.EntityState.Unchanged;
}