批量插入服务


  IBatcherProvider 提供数据的批量插入。目前 Fireasy 所适配的数据库都提供了该扩展服务,该服务需要数据库提供机制,实现秒级上万乃至百万数据的插入。注意 Oracle 的批量插入需要使用 OracleAccessProvider 驱动。

  该接口同时支持 DataTableList<T> 的批量插入。下面的示例使用的是后者:

public class BatcherData
{
    public int ID { get; set; }
    public string NAME1 { get; set; }
    public string NAME2 { get; set; }
}

[TestMethod]
public void TestBatchInsert()
{
    using (var db = DatabaseFactory.CreateDatabase())
    {
        //获取 IBatcherProvider
        var batcher = db.Provider.GetService<IBatcherProvider>();
        if (batcher == null)
        {
            Console.WriteLine("不支持批量插入。");
            return;
        }

        var list = new List<BatcherData>();

        //构造100000条数据
        for (var i = 0; i < 100000; i++)
        {
            list.Add(new BatcherData { ID = i, NAME1 = i.ToString(), NAME2 = i.ToString() });
        }
        
        batcher.Insert(db, list, "BATCHER");
 
        //输出batcher表的数据量
        var sql = new SqlCommand("SELECT COUNT(1) FROM Batcher");

        Console.WriteLine("共有{0}条数据", db.ExecuteScalar(sql));
    }
}