Entity framework 4 EF 4.1代码优先分离实体
我正在尝试向数据库添加一个实体。一旦我添加了它,我想分离它,这样我就可以安全地操作对象,而无需对数据库做任何更改。调用Entity framework 4 EF 4.1代码优先分离实体,entity-framework-4,ef-code-first,Entity Framework 4,Ef Code First,我正在尝试向数据库添加一个实体。一旦我添加了它,我想分离它,这样我就可以安全地操作对象,而无需对数据库做任何更改。调用context.SaveChanges()后,我执行以下操作以分离实体: // save context.Stories.Add(story); // attach tags. They already exists in the database foreach(var tag in story.Tags) context.
context.SaveChanges()
后,我执行以下操作以分离实体:
// save
context.Stories.Add(story);
// attach tags. They already exists in the database
foreach(var tag in story.Tags)
context.Entry(tag).State = System.Data.EntityState.Unchanged;
context.SaveChanges();
context.Entry(story).State = System.Data.EntityState.Detached;
但是,将实体状态更改为“分离”将删除和“我的实体”关联的所有相关实体。有没有办法阻止这一切
如果我不分离实体,下次调用context.SaveChanges()
谢谢 没有办法。这是EF的局限性。你的选择是:
- 未将同一上下文用于另一个保存(单个上下文实例=单个保存)
- 使用另一个不会用于保存的上下文实例再次从数据库检索实体
- 创建实体的深度克隆并使用clonned克隆(深度克隆通过序列化和即时反序列化完成=实体图必须可序列化)
- Purist:从DbContext中检索实体并在不保存的情况下修改它们是对工具和体系结构的滥用。改用DTO
- 实用:您可以使用
检索上下文不会跟踪更改的实体图AsNoTracking()