如何在 Entity Framework 中添加仅 Id 不同的实体(但让 In 管理到 EF)?

How to add, in Entity Framework, entities that differs only by Id (but let In management to EF)?

我想知道当项目仅因 Id 不同时在 EF 中插入项目的最佳实践(Id 字段是一个 int,它是相应 table 的键)。

现在,我让 Id 为空,然后 EF 根据数据库中的最后一个 Id 生成正确的 Id,我猜。

但是由于我要输入很多条记录,有时我不得不添加2条数据相同的记录(除了Id)。如果我不想自己管理Id,怎么办?

谢谢。

这个问题太笼统了。只需检查 EF 中的任何批处理。

一般来说,仅仅因为共享一些相似的数据而重用对象是不值得的,您应该创建尽可能多的对象,将它们添加到列表并保存上下文。

如果要插入的对象很多,第一步是优化插入:

  • 调用 SaveChanges 每个 X 项目,因此 EF 发送一些,但不是全部发送到同一时间。
  • 如果您不需要 ID,请使用没有跟踪的上下文。
  • 等等

如果您有更多的对象,而这对您不起作用,您可以使用外部工具,例如 EF Extensions,它具有批量插入实用程序

// Easy to use
context.BulkInsert(customers);

// Easy to customize
context.BulkInsert(invoices, options => options.IncludeGraph = true);

如果你有更多的对象,或者你的服务器内存真的非常非常有限,那么是的,你可以使用同一个对象,但你必须将 id 设置为 0 并且每次分离对象是已创建。

dbContext.Entry(entity).State = EntityState.Detached;