我相信,如果您使用linq或.Find命令加载数据库对象,调用中也包含的子集集会自动将项添加到changetracker中并保存它们:
entity.Children.Add(entityChild);这将把它添加到附加实体的变更跟踪器中。
但是,如果您正在创建一个新的实体,并且在构造函数上将ICollection设置为一个新的HashSet(),那么当您执行Children.Add(entityChild)行时,它不会添加到更改跟踪器中。
如何初始化新对象的ICollections,以便在添加到子对象时将其添加到更改跟踪器中?
我认为如果您添加了父对象,那么应该也添加所有新的子项到变更跟踪器中(例如,创建父项,添加子对象,然后将父项添加到DbSet中也应该将子项添加到更改跟踪器中,对吗?)
谢谢!
发布于 2012-11-10 06:00:11
如果要在启用更改跟踪的情况下创建实体类型的新实例,则需要使用DbSet上的Create method。
您还可以通过在DbContext.ChangeTracker上调用DetectChanges method来手动启动更改检测。
最后,如果您想要向POCO类添加大量代码,可以查看由self-tracking entities template生成的代码。这实际上与EF对查询数据库时返回的对象所使用的代码相同。
https://stackoverflow.com/questions/13312986
复制相似问题