C# 删除实体框架上下文中的所有记录并重新创建它的正确方法是什么?

C# 删除实体框架上下文中的所有记录并重新创建它的正确方法是什么?,c#,entity-framework,C#,Entity Framework,我希望在文件系统中保存一个包含映像路径记录的数据库。刷新记录的最佳方法似乎是删除所有记录,然后重新创建所有记录。由于每5000条记录大约需要1分钟的时间,此时图像可能对web服务器不可用,因此我认为有一种方法可以做到这一点,即5000条记录需要不到1分钟的时间。那会是什么样子 下面是一个缓慢代码的示例: foreach(ImageRecord imageRecord in EntityFrameworkCollection) { databaseContext.ImageRecords.

我希望在文件系统中保存一个包含映像路径记录的数据库。刷新记录的最佳方法似乎是删除所有记录,然后重新创建所有记录。由于每5000条记录大约需要1分钟的时间,此时图像可能对web服务器不可用,因此我认为有一种方法可以做到这一点,即5000条记录需要不到1分钟的时间。那会是什么样子

下面是一个缓慢代码的示例:

foreach(ImageRecord imageRecord in EntityFrameworkCollection)
{
    databaseContext.ImageRecords.Remove(imageRecord);
}

//...SaveChanges() and/or recreate context

foreach(ImageRecord imageRecord in FileSystemCollection)
{
    databaseContext.ImageRecords.Add(imageRecord);
}
有一个名为的库,我喜欢使用它进行批量操作,就像您的库一样。您可以像这样使用批处理操作:

await databaseContext.ImageRecords.DeleteAsync();
它将删除您的所有记录,而无需查看所有记录。快速的简单

然后,对于批量添加,您可以使用AddRangeSync方法,而不必遍历每个记录,如下所示:

await databaseContext.ImageRecords.AddRangeAsync(FileSystemCollection);
await databaseContext.SaveChangesAsync();

您可以首先确定差异,然后使用EntityFramework的异步操作进行更新,看看是否有差异。这些差异是一个真正的迷宫——即使进行排序列表,也会丢失移动到新目录的图像,并且在发生合法冲突时,MD5会丢失选择,这会导致额外的不准确。