我正在尝试使用实体框架播放SQLite数据库但它的速度慢得令人无法接受。
我有一个包含5列的实体MyEntity
,其中一个复合键由3列组成。
dbContext.MyEntity.AddOrUpdate(x => new{x.Key1, x.Key2, x.Key3}, myEntities.ToArray());
这非常慢。在40秒内完成1138行。
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 library这样:dbContext.BulkInsertOrUpdate(myEntities)
导致以下异常:
System.Reflection.TargetInvocationException:抛出了异常 通过调用的目标。 ---&GT; System.Data.SQLite.SQLiteException:数据库模式已更改 &#34; 0&#34;:语法错误
我相信这是因为我还没有提供复合密钥的信息(无法提供)。
如何在合理的时间内播放SQLite数据库?