首页 新闻 会员 周边 捐助

Entity Framework Extended 批量删除

0
悬赏园豆:20 [已解决问题] 解决于 2015-05-13 23:41

看了 http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html 这篇文章,但不知道我 

dbSet的Delete方法用不了,求指教。

 

PS, 用foreach Remove方法就别试了,数据量少没问题,数据多了,就麻烦了。所以这种是放弃的。

stevenhzj的主页 stevenhzj | 初学一级 | 园豆:10
提问于:2014-05-13 17:47
< >
分享
最佳答案
0

以下我的拓展

 

public static class DbContextExtensions
{
    public static void DeleteBatch<T>(this DbContext context, IQueryable<T> query) where T : class
    {
        string sqlClause = GetClause<T>(query);
        context.Database.ExecuteSqlCommand(String.Format("DELETE {0}", sqlClause));
    }

    private static string GetClause<T>(IQueryable<T> clause) where T : class
    {
        string snippet = "FROM [dbo].[";

        string sql = clause.ToString();
        string sqlFirstPart = sql.Substring(sql.IndexOf(snippet));

        sqlFirstPart = sqlFirstPart.Replace("AS [Extent1]", "");
        sqlFirstPart = sqlFirstPart.Replace("[Extent1].", "");

        return sqlFirstPart;
    }
}


简单调用

 

context.DeleteBatch(context.People.Where(p => p.Name == "Jim"));

 

收获园豆:20
wongdavid | 菜鸟二级 |园豆:394 | 2014-05-14 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册