首页 新闻 搜索 专区 学院

EF能实现批量增删改吗?

0
悬赏园豆:5 [已解决问题] 解决于 2013-05-15 14:45

我现在在使用EF的时候,都是用foreach的形式,去增加/修改/删除大批量的数据,我用profile查看,发现EF为每笔数据都生成了一条SQL语句,而且感觉速度明显有点慢。请问,EF有批量处理的功能吗?

Jeffrey.Liang的主页 Jeffrey.Liang | 初学一级 | 园豆:43
提问于:2013-02-04 10:47
< >
分享
最佳答案
0

of course

收获园豆:1
jerry-Tom | 老鸟四级 |园豆:4077 | 2013-02-04 11:53

how to implement it?

Jeffrey.Liang | 园豆:43 (初学一级) | 2013-02-05 08:42
其他回答(4)
0

在循环外SaveChange

Rich.T | 园豆:3440 (老鸟四级) | 2013-02-04 12:49

具体怎么写?

支持(0) 反对(1) Jeffrey.Liang | 园豆:43 (初学一级) | 2013-02-05 08:43
0

SaveChanges(false)+AcceptAllChanges()

View Code
using (TransactionScope scope = new TransactionScope())
{
    //Do something with context1
    //Do something with context2

    //Save Changes but don't discard yet
    context1.SaveChanges(false);

    //Save Changes but don't discard yet
    context2.SaveChanges(false);

    //if we get here things are looking good.
    scope.Complete();
    context1.AcceptAllChanges();
    context2.AcceptAllChanges();

}
收获园豆:3
geass.. | 园豆:1701 (小虾三级) | 2013-02-04 13:08

我用的是Entity Framework 5.0,context是继承于DbContext的。我在VS里看了,context没有带bool参数的SaveChanges()方法。另外你似乎没明白我的问题。我的问题是,下面的这段代码用于删除与contractInfo关联的所有ContractPlan记录。因为我没发现批量删除方法,所有只能用foreach逐个删除,假如plans的长度是100,我发现EF生成了100条用于删除ContractPlan的语句,这是个问题。

List<ContractPlan> plans = contractInfo.ContractPlans.ToList();
                    foreach (ContractPlan item in plans)
                    {
                        context.ContractPlans.Remove(item);
                    }

支持(0) 反对(0) Jeffrey.Liang | 园豆:43 (初学一级) | 2013-02-05 08:48

@Jeffrey.Liang: 

你使用了ToList(),所以会发现有100条删除,这是个问题的所在……

支持(0) 反对(0) 雪美·考拉 | 园豆:200 (初学一级) | 2013-02-25 01:35

@雪美·考拉: 

我按照你说的,将代码改成了这样:

  ICollection<ContractPlan> plans = contractInfo.ContractPlans;
                    foreach (ContractPlan item in plans)
                    {
                        context.ContractPlans.Remove(item);
                    }

在执行foreach的时候,会报“集合已修改;可能无法执行枚举操作。”的异常。

支持(0) 反对(0) Jeffrey.Liang | 园豆:43 (初学一级) | 2013-03-21 15:58
0

savechanges()

Invictus | 园豆:76 (初学一级) | 2013-03-05 08:51
0

貌似是木有批量删除的方法的.还得一个个标记删除,最后一次保存,但是还是很多条删除语句的.

收获园豆:1
平常心队长 | 园豆:1113 (小虾三级) | 2013-04-10 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册