将新记录从一个数据库导入另一个数据库的最快方法?

时间:2014-03-17 17:19:18

标签: c# .net entity-framework entity

使用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记录。

那么最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

最快的方法是数据永远不会离开数据库服务器。服务器进程更新该日志表中的日志表和前端更新 - T.S.昨天

1 - 服务器可以链接,映射可以保存为服务器进程使用的元数据。

2 - 你有没有想过这样做出口/进口风格?导出到文本文件,从文本文件导入。数据库是如何做到的,为什么你的程序应该不同?