Servicestack - Ormlite - 大容量数据加载

Servicestack - Ormlite - high volume data loading

我在高数据加载情况下遇到 Servicestack 和 OrmLite 的一些问题。

具体来说,
1. 我有一个包含 1000 000 个实体的列表
2. 如果记录尚不存在

,我想将它们插入 Db(使用 Sql 服务器)

因此,

public class Entity  
{  
  [Autoincrement]  
  public int Id {get;set;}  
  public string Name {get;set;}  
  public string Address {get;set;}  
}

现在是导入逻辑,

List<Entity> entities = oneMillionEntities.ToList();  
foreach (var entity in entities)  
{   
    if (!db.Exists<Entity>(ar => ar.Address == entity.Address))  
    {  
        db.Save(entity);  
    }  
}  

问题是数据库经常忙于保存操作,因此 db.Exists 并不总是产生正确的结果。处理这些情况的最佳方法是什么?

尝试

// Prepare SqlExpression
var ev = Db.From<Entity>().Select(p => p.Address).GroupBy(p => p.Address);

// Execute SqlExpression and transform result to HashSet
var dbAddresses = Db.SqlList(ev).ToHashSet();

// Filter local entities and get only local entities with different addresses
var filteredEntities = oneMillionEntities.Where(p => 
!dbAddresses.Contains(p.Address));

// Bulk insert
db.InsertAll(filteredEntities.ToList());