0

我相信,如果您使用 linq 或 .Find 命令加载数据库对象,那么调用中也包含的子集合将自动将项目添加到 changetracker 并保存它们:

entity.Children.Add(entityChild);

这会将它添加到附加实体的更改跟踪器中就好了。

但是,如果您正在创建一个新实体,并且在构造函数上将 ICollection 设置为新的 HashSet(),则在执行 Children.Add(entityChild) 行时它不会添加到更改跟踪器中。

您如何为新对象初始化 ICollections,以便在添加到子对象时将其添加到更改跟踪器?

而且我认为如果您添加了父级(即创建父级,添加子级然后将父级添加到 DbSet 也应该将子级添加到更改跟踪器中,那么它也应该将所有新的子级添加到更改跟踪器中吗? )

谢谢!

4

1 回答 1

1

如果要创建启用更改跟踪的实体类型的新实例,则需要使用 DbSet 上的Create 方法

您还可以通过调用DetectChanges 方法手动启动更改DbContext.ChangeTracker检测。

最后,如果您想在 POCO 类中添加大量代码,您可以查看自跟踪实体模板生成的代码。这实际上与 EF 用于查询数据库时返回的对象的代码相同。

于 2012-11-09T22:00:10.767 回答