C# 将新记录从一个数据库导入另一个数据库的最快方法?
使用EF,我需要从一个数据库中提取记录,进行一些初始化和映射,然后将记录插入另一个数据库。我只需要对尚未导入的记录执行此操作。我在辅助数据库上的模型如下所示:C# 将新记录从一个数据库导入另一个数据库的最快方法?,c#,.net,entity-framework,entity,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; } // th
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,从而导致某些贷款被遗漏和删除。例如,如果贷款是在上次导入之后创建的,但经过编辑使LDA在上次导入之前,则不会导入新贷款
方法2:
我从辅助数据库中检索到了所有原始出价。然后提取原始出价集合中不包含Id的所有记录。请注意,查询中包含了更多的选择条件
var allIds = _2ndDbLoanRepo.Query()
.Select(m => m.OriginalDbId)
.ToList();
var newRecords = _1stDbLoanRepo.Query()
.Where(other criteria ...)
.Where(m => !allIds.Contains(m.Id))
.ToList();
当已经找到10万条以上的记录时,这种方法最终会变得缓慢。它已经抛出EntityCommandExecutionException,消息超时已过期。操作完成前的超时时间或服务器没有响应(只有10k记录)
那么,最好的方法是什么呢?最快的方法是数据永远不会离开数据库服务器。服务器进程更新日志表,前端更新该日志表–T.S.昨天
1-可以链接服务器,并将映射保存为元数据,以供服务器进程使用
2-您是否想过以导出/导入方式进行此操作?导出到文本文件,从文本文件导入。数据库就是这样做的,为什么您的程序应该不同 最快的方法是数据永远不会离开数据库服务器。服务器进程更新日志表,前端更新该日志table@T.S.这两个数据库位于不同的服务器上。在两个数据库之间的代码中,我需要做一些初始化/附加/映射的工作。服务器可以链接,映射可以保存为元数据,供服务器进程使用。你有没有想过以导出/导入的方式来做?导出到文本文件,从文本文件导入。数据库就是这样做的,为什么你们的程序应该不同呢?我没想过要这样做。我知道这很糟糕,但EF让我无法深入研究sql或dms。导出仍然需要知道哪些记录已经导出。我也没有权限编辑原始数据库。你有什么指导我这样做的吗?原始数据库如何知道要导出哪些记录?对于链接服务器,您只需从不存在的sourceTable中选择x,从targetTable中选择1,其中targetTable.id=sourceTable.id。表使用4个零件名称。