【EF】EF扩展库(批量操作)

EF删除和修改数据只能先从数据库取出,然后再进行删除

  delete from Table1 where Id>5;

  update Table1 set Age=10;

我们需要这样操作

//删除
var t1 = context.Table1.Where(t => t.Id > 5).ToList();
foreach(var t in t1)
{
    context.Table1.Remove(t);
}
context.SaveChange();

//更新
var t1 = context.Table1.ToList();
foreach(var t in t1)
{
    t.Age = 10;
}
context.SaveChange();

在github中提供了一个EF扩展库,支持批量操作,不用先查询出来,然后逐个删除

  https://github.com/loresoft/EntityFramework.Extended

在VS可以直接通过NuGet安装(因为我EF是5.0的,所以加上版本号,现在出到6了)

  PM> Install-Package EntityFramework.Extended -Version 5.0.0.73

安装完成后

 1        //删除
 2        context.Table1.Delete(u => u.Id > 5);
 3        context.SaveChange();
 4 
 5        //更新
 6        public static void UpdateBalance(ChannelAccount channelAccount)
 7         {
 8             using (FinanceContext context = new FinanceContext())
 9             {
10                 context.ChannelAccounts
11                     .Where(t => t.ChannelAccountID == channelAccount.ChannelAccountID)
12                     .Update(t => new ChannelAccount {Balance = channelAccount.Balance});
13                 context.SaveChanges();
14             }
15         }

扩展库还支持批量查询功能

例如:在分页查询的时候,需要查询结果数,和结果集

EF做法:

var q = container.Users.Where(u => u.Name.StartsWith("a"));
//查询2次

var count = q.Count();
var data = q.Skip(10).Take(10).ToList();

EF扩展库的做法

var q = context.Table1.Where(t => t.Name.StartsWith("a"));
var q1 = q.FutureCount();
var q2 = q.Skip(10).Take(10).Future();

//一次查询
var data = q2.ToList();
var count = q1.Value;

扩展库还支持查询缓存功能

var users = container.Users.Where(u => u.Id > 5).FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(10)));

如果在10秒内重复查询,则会从缓存中读取,不会查询数据库

原文地址:https://www.cnblogs.com/yanglang/p/7444544.html