从我的研究中,我读到调用DbContext.Entry(someEntity)会自动将实体附加到上下文。
然而,当我这样做时,我发现实体的状态是分离的。
任何人都可以了解这一点以及DbContect.Entry的工作原理。我使用的是EF 5.0
感谢。
答案 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;
}