c# - 附加具有关联的实体以进行修改

标签 c# .net entity-framework poco persistence-ignorance

我会修改带有关联集合的分离实体,例如:

人和地址是 POCO。

当我附加实体并保存更改时,未检测到集合更改,我如何更新 Person 的地址(添加和删除的项目)?

我要手动跟踪我的收藏吗?

编辑

分离的 POCO 的同步必须是手动的...EF 不打算合并集合的解决方案(导航属性和关系):(

我比较当前和原始集合并检测差异

最佳答案

如果您正在使用 Entity Framework,我假设您正在使用 Entity Framework,因为您将其列为问题的标签,那么对象仅在它们由实体上下文生成时跟踪它们的更改。

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();

这将允许您拉入实体、更新它并保存更改。

关于c# - 附加具有关联的实体以进行修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5222949/

相关文章:

.net - 表达式中未定义的函数 'Nz'

c# - 如何更改 C# .NET 3.5 中进度条的颜色?

c# - 使用自定义在数据库中存储不同的用户权限

c# - Windows Azure 每天创建表

c# - 使用 Entity Framework 和 LINQ 查询大型数据集时如何避免内存溢出

c# - 相关实体未加载

javascript - 无法删除文件,因为它正被另一个进程 ASP.NET Core MVC 使用

c# - SQLite 插入语句

c# - 在 C# 中公开数组元素的属性

c# - 使用日期时间选择器过滤 Crystal 报表中的数据