Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架&x27;s AddObject似乎导致了重大性能问题,如何解决?_Entity Framework_Azure_Entity Framework 6 - Fatal编程技术网

Entity framework 实体框架&x27;s AddObject似乎导致了重大性能问题,如何解决?

Entity framework 实体框架&x27;s AddObject似乎导致了重大性能问题,如何解决?,entity-framework,azure,entity-framework-6,Entity Framework,Azure,Entity Framework 6,我正在使用EF6和POCOs。我有一个性能问题,并在下面的代码中将其定位到AddObject行。所有其他行只需很少的时间。使用本地数据库 var myOrderList = db.Order.Where(r => r.SupplierId== mySupplier.Id).OrderBy(r => r.Id).ToList(); //Local 5ms Azure 40ms. foreach (Order myOrder in myOrderList) { var myOrd

我正在使用EF6和POCOs。我有一个性能问题,并在下面的代码中将其定位到AddObject行。所有其他行只需很少的时间。使用本地数据库

var myOrderList = db.Order.Where(r => r.SupplierId== mySupplier.Id).OrderBy(r => r.Id).ToList(); //Local 5ms Azure 40ms.

foreach (Order myOrder in myOrderList)
{
   var myOrderItem = new OrderItem
   {
       OrderId = myOrder.Id,
       ProductId = product.Id
   };
   db.OrderItem.AddObject(myOrderItem); //Local 20ms Azure 300ms.
}

db.SaveChanges(); //Local 12ms Azure 40ms.
因此,AddObject似乎存在固有的性能问题,尤其是暴露在Azure问题中

如何解决这个AddObject性能问题?不知道为什么会这样

谢谢

编辑1


在Azure中,我使用Azure网站(中等)来对抗SQLAzure(Web版)。我的本地(开发)安装程序由同一台计算机上WIndows 7上的IIS和SQL Server 2008 SP2组成。

我在向MS SQL Server添加大量项目时遇到类似问题。我最终使用了更快的ExecuteSqlCommand。
但这只是将数据添加到数据库中,而不是添加到EF对象中,这在您的情况下可能是一个问题,也可能不是一个问题


你在Azure中写什么?虚拟机上的Azure SQL数据库或SQL Server?如果您使用的是Azure SQL数据库,则可能需要提高运行的级别(性能目标设置为Standard或Premium)。@SimonW,有关详细信息,请参阅Edit1setup@SimonW,有关设置,请参阅Edit1。标准数据层(尤其是高级数据层)的成本要高得多,并不能真正解决EF内部的潜在低效问题。我正在考虑的一个选择是用诸如Simple.Data这样的MicroORM代码替换代码,它更高效,并且以接近ADO.NET的速度运行,或者像Edgar所说的那样使用ExecuteSqlCommand。我认为AddObject正在做很多后台工作,比如跟踪。。。。但是当这个AddObject在一个循环中时,它加起来非常快。谢谢你。我有一种感觉,AddObject正在做大量的背景资料,所以除了我上面的评论之外,你的建议是合理的。然而,我希望听到更多人对AddObject问题的意见。顺便说一句,ExecuteSqlCommand在我的情况下不是问题,我可以直接使用。我最终使用了db.ExecuteStorommand(“插入到…”这提供了一个巨大的改进不确定“ExecuteSqlCommand”和“ExecuteStorommand”之间的区别?