用实体框架播种SQLite - 性能问题

时间:2017-09-20 14:57:43

标签: c# sqlite entity-framework-6 bulkinsert query-performance

简介

我正在尝试使用实体框架播放SQLite数据库但它的速度慢得令人无法接受。

我有一个包含5列的实体MyEntity,其中一个复合键由3列组成。

初步方法

dbContext.MyEntity.AddOrUpdate(x => new{x.Key1,  x.Key2, x.Key3}, myEntities.ToArray());

这非常慢。在40秒内完成1138行。

另一次尝试

然后使用thisthisthis我想出了这个块:

using (var scope = new TransactionScope())
{

    DatabaseContext dbContext;

    using (dbContext = new DatabaseContext())
    {

        dbContext.Database.Connection.Open();

        for (int i = 0; i < myEntities.Count; i++)
        {
            dbContext.MyEntity.AddOrUpdate(
                x => new
                {
                    x.Key1,
                    x.Key2,
                    x.Key3

                },
                myEntities.ElementAt(i));

            if (i % 100 == 0)
            {
                dbContext.SaveChanges();
                dbContext.Dispose();
                dbContext = new DatabaseContext();
                dbContext.Database.Connection.Open();
            }

        }
        dbContext.SaveChanges();
        dbContext.Dispose();
    }
    scope.Complete();
}

可悲的是,我得到了:

  

消息:测试方法抛出异常:   System.Data.SQLite.SQLiteException:数据库已锁定   数据库被锁定

尝试使用BulkExtensions库

我也尝试BulkExtensions library这样:dbContext.BulkInsertOrUpdate(myEntities)

导致以下异常:

  

System.Reflection.TargetInvocationException:抛出了异常   通过调用的目标。 ---&GT;   System.Data.SQLite.SQLiteException:数据库模式已更改   &#34; 0&#34;:语法错误

我相信这是因为我还没有提供复合密钥的信息(无法提供)。

问题

如何在合理的时间内播放SQLite数据库?

0 个答案:

没有答案