使用EF,我需要从一个数据库中提取记录,进行一些初始化和映射,然后将记录插入到另一个数据库中。对于尚未导入的记录,我只需要这样做。我在辅助数据库上的模型如下:
public class Loan
{
public int Id { get; set; }
// this is the id of this loan's record from the original DB
public int OriginalDbId { get; set; }
// the loan's last date of attendance
public DateTime LDA { get; set; }
...
}
方法1:
我添加了一个名为ImportHistory的模型,它只保存了上次导入的时间。我用这个日期来拉动LDA大于上次进口时的贷款。问题在于,用户可以编辑贷款的LDA,从而导致一些贷款被遗漏,并且可以使用vise。例如,如果贷款是在上次导入后创建的,但是经过编辑以便LDA在最后一次导入之前,则不会导入新贷款。
方法2:
我从辅助数据库中检索了所有OriginalDbIds。然后拉出所有记录,其中Id未包含在OriginalDbIds的集合中。请注意,查询中包含更多选择条件。
var allIds = _2ndDbLoanRepo.Query()
.Select(m => m.OriginalDbId)
.ToList();
var newRecords = _1stDbLoanRepo.Query()
.Where(other criteria ...)
.Where(m => !allIds.Contains(m.Id))
.ToList();
当已经找到100k +记录时,这种方法最终会变慢。它已经抛出一个EntityCommandExecutionException,消息“Timeout expired。在操作完成之前已经过了超时时间,或者服务器没有响应”,当时只有10k记录。
那么最好的方法是什么?
答案 0 :(得分:0)
最快的方法是数据永远不会离开数据库服务器。服务器进程更新该日志表中的日志表和前端更新 - T.S.昨天
1 - 服务器可以链接,映射可以保存为服务器进程使用的元数据。
2 - 你有没有想过这样做出口/进口风格?导出到文本文件,从文本文件导入。数据库是如何做到的,为什么你的程序应该不同?