我相信如果您使用linq或.Find命令加载数据库对象,那么也包含在调用中的子集合将自动将项目添加到更改跟踪并保存它们:
entity.Children.Add(entityChild);
这会将它添加到附加实体的更改跟踪器中。
如果您正在创建新实体并且在构造函数上,则将ICollection设置为新的HashSet(),当您执行Children.Add(entityChild)行时,它不会添加到更改跟踪器。
如何初始化新对象的ICollections,以便在添加到子项时将其添加到更改跟踪器?
我认为如果添加了父级,也应该添加所有对变更跟踪器不熟悉的子项(即创建父级,添加子级,然后将父级添加到DbSet,将子级添加到更改跟踪器)太对了?)
谢谢!
答案 0 :(得分:1)
如果要创建启用了更改跟踪的实体类型的新实例,则需要在DbSet上使用Create method。
您也可以通过DbContext.ChangeTracker
上的DetectChanges method来手动启动更改检测。
最后,如果要向POCO类添加大量代码,可以查看self-tracking entities template生成的代码。这实际上与EF用于查询数据库时返回的对象的代码相同。