使用 ef core AsNoTracking 进行复制

Do a copy with ef core AsNoTracking

我正在尝试复制 ef-core 2.0 中的一个对象。我使用的查询使用 Include ande 获取大量对象,然后我使用 AsNoTracking 告诉 ef 这是一个全新的对象。

我使用默认设置并让数据库在插入时生成 ID。但是当我使用 AsNoTracking 查询时,我仍然得到原始对象的 ID,这使我在 SaveChanges 上出现异常。

SqlException: Cannot insert explicit value for identity column in table 'Plans' when IDENTITY_INSERT is set to OFF.

我实际上并不想更改此设置,如果我遍历对象并将 Id 更改为 0,它就可以工作。有没有办法不用遍历所有对象就可以解决这个问题?

有没有更好的创建副本的方法?

正如 Ivan 上面评论的那样,没有比这更好的答案了,所以请查看此 link 以获得更好的答案。在我的例子中,我以与之前相同的方式获取对象和层次结构,然后遍历对象并将 PK 设置为 0。