日期:2014-05-17  浏览次数:20402 次

Entity Framework大批量添加数据,效率低。
用EF一次新增2000多条数据的时候,居然需要10多分钟。。请问这个可以怎么优化?
主实体
MainEntity:
ID
List<Detail> Details
Created
子实体。
Detail:{....}

我这用EF当Details有2000多条数据就卡住了。。悲剧。。.
请问有好的解决办法吗?

------解决方案--------------------
估计是你自己写的代码有问题
------解决方案--------------------
Entity Framework和linq to sql
都是把数据保存在缓存中的,
先把对象插入缓存,在插入的时候验证对象是否重复

这样当然慢呢

关闭Entity Framework的缓存模式,看行不行

反正我是控制不好Entity Framework的缓存。
至于lingtosql,我改了它的底层。绕过去了
呵呵

------解决方案--------------------
你不能把SqlBulkCopy的速度和SQL的Insert 作比较。
两者实现方式完全不同。
EF只是一个ORM框架,在某些功能的性能上肯定是不能和原生的东西比。

你可以试试用原始的ADO.NET来插入你这2000条数据看要多久。
------解决方案--------------------
public virtual int Add(List<MainEntity entity> list)
{
entity.Validate();

using (var context = new KFPOS2HQEntities())
{
for(;;)
{
context.MainEntities.ApplyChanges(entity);
}
return context.SaveChanges();
}
}