SQL Server CE EF优化

时间:2013-11-27 04:19:35

标签: c# entity-framework sql-server-ce

我有以下代码,使用EF6将数据更新/添加到SQL Server CE数据库,这对于少量记录工作正常。但是当记录量超过1000~2000时,交易变得非常缓慢(10~15秒)。有没有办法优化它?

Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", MyProject.ConnectionString);

ProjectContext context = new ProjectContext();
context.Configuration.AutoDetectChangesEnabled = false;
context.Configuration.ValidateOnSaveEnabled = false;

using (var db = new ProjectContext())
{           
    foreach (var item in MyProject.Brands)
    {
        if (!db.Brands.Any(i => i.Name == item.Name))
        {
           // Add
           db.Brands.Add(item);
        }
        else
        {
           // Update
           var found = db.Brands.First(i => i.Name == item.Name);
           found = item;
        }
    }

    db.SaveChangesAsync();

1 个答案:

答案 0 :(得分:2)

这样您就可以节省50%的Linq查询,并且您的更新可能确实有效(您的MyProject.Brands不会以任何方式附加到您正在使用的new ProjectContext found你从那里提取的附加的,但在原始代码中,你用yuor item覆盖了它,这意味着它将被忽略。 context我完全遗漏了,因为你没有用它做任何事情,因为你的使用无论如何都会创建一个新的ProjectContext

using (var db = new ProjectContext())
{           
    foreach (var item in MyProject.Brands)
    {
        var found = db.Brands.FirstOrdefault(i => i.Name == item.Name);
        if (found == null)
        {
           // Add
           db.Brands.Add(item);
        }
        else
        {
           // Update
           found.prop1 = item.prop1;
           found.prop2 = item.prop2;
           // ... etc, for all and any updatable properties
        }
    }
    db.SaveChangesAsync();
}