Azure Entityframework SaveChanges非常慢

时间:2017-01-17 09:31:49

标签: entity-framework azure asp.net-web-api2

我在azure上托管.Net Web Api,api只是在sql server数据库中更新一行。这是我的Updatecode:

using (Storage ctx = new Storage())
        {
            string json = JsonConvert.SerializeObject(ev, _jsonsettings);
            Data ex = ctx.dbsData.FirstOrDefault();
            if (ex == null)
                ctx.dbsData.Add(new Data() { Json = json, LastUpdate = DateTime.Now });
            else
            {
                ex.Json = json;
                ex.LastUpdate = DateTime.Now;
                ctx.Entry(ex).State = EntityState.Modified;
            }
            ctx.SaveChanges();
            return new HttpResponseMessage(HttpStatusCode.OK);
        }

我有第二种只清除表格的方法:

 [HttpDelete]
    public HttpResponseMessage Clear()
    {
        using (Storage ctx = new Storage())
        {
            ctx.dbsData.RemoveRange(ctx.dbsData);
            ctx.SaveChanges();
            return new HttpResponseMessage(HttpStatusCode.OK);
        }
    }

另见我的DbContext类:

 public class Storage : DbContext
{
    public DbSet<Data> dbsData { get; set; }

    public Storage(string connectionstring) : base(connectionstring)
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
        Configuration.ValidateOnSaveEnabled = false;
        Configuration.AutoDetectChangesEnabled = false;
    }

    public Storage() : this("tom")
    {

    }
}

我的问题是,这两种方法都极其缓慢。我发现如果我删除SaveChanges()命令它执行得更快。所以我的问题是如何才能提高性能,为什么更新/删除一行需要花费很长时间?

1 个答案:

答案 0 :(得分:-3)

这完全取决于表ctx.dbsData中的数据量。 ctx.dbsData.RemoveRange(ctx.dbsData);将那些行标记为仅删除。但更改只会在调用SaveChanges()后反映出来; 为了加快处理速度,您可以进行异步调用。