我会修改带有关联集合的分离实体,例如:
人员和地址是 POCO。
当我附加实体并保存更改时,未检测到集合更改,如何使用地址更新人员(添加和删除的项目)?
我要手动跟踪我的收藏吗?
编辑
分离的 POCO 的同步必须是手动的...... EF 不打算合并集合的解决方案(导航属性和关系):(
我比较当前和原始集合并发现差异
我会修改带有关联集合的分离实体,例如:
人员和地址是 POCO。
当我附加实体并保存更改时,未检测到集合更改,如何使用地址更新人员(添加和删除的项目)?
我要手动跟踪我的收藏吗?
编辑
分离的 POCO 的同步必须是手动的...... EF 不打算合并集合的解决方案(导航属性和关系):(
我比较当前和原始集合并发现差异
如果您使用的是实体框架,我假设您使用的是实体框架,因为您将其列为问题的标签,那么对象仅在实体上下文生成它们时才跟踪它们的更改。
User someUser = dbEntities.Users.Single(x => x.Username == "test");
someUser.Name = "changed name";
db.SaveChanges();
该代码将检测更改并保留它们。
User someUser = new User()
{
Username = "test" //assuming there is already user called test in the database.
}
以这种方式创建用户将不允许 EF 上下文检测更改。相反,您需要从数据库中加载实体,更新它,然后持久化更改。
string username = "test";
User someUser = db.Users.Single(x => x.Username == username);
TryUpdateModel(someUser, valueProvider); //valueProvider is usually a form collection of some sort, but could be anything that implements IValueProvider.
db.SaveChanges();
这将允许您拉入实体、更新它并保存更改。
您还可以使用分离的 POCO 类,然后将其重新附加到上下文并将状态设置为已修改:
阅读这篇文章:http: //blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-状态.aspx