zoukankan      html  css  js  c++  java
  • Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    转:http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended

    也可以在nuget上直接安装这个包,最新版本已经改用对IQueryable<T>的扩展。下面介绍如何批量删除、更新、查询。

    批量删除

    本来我们需要这样删除

    //EF原生的删除需要先取出entity然后remove
    context.Remove(context.Users.First(u=>u.Key==xxx);
    //如果要删除更多
    foreach(var user in context.Users.Where(u => u.FirstName == "firstname").ToList())
    {
    context.Remove(user);
    }
    
    

    本来一句sql可以解决的问题,变得复杂了。

     使用ORM是为了跟sql尽量的解耦,并且能在编译时检查出更多的错误,但是上面的写法让人堵的慌,如果你也有这种感觉下面的写法是不是就是你脑子里想要的东西呢。

    ----引用EF Extend Libary后删除只需要一次就完成了,效率高了很多,也不需要太多的连接资源,使用更方便了

    //delete all users where FirstName matches
    context.Users.Delete(u => u.FirstName == "firstname");
    //当然如果我这样写也可以
    context.Users.Where(...).Delete();

    批量更新

    //批量更新用户名中包含大写J的用户设置工资为999
    context.Users.Update(
        u => u.Name.Contans("J"), 
        u2 => new User {Salary = 999});
     
    //第一个参数也可以传入已经有的IQuaryable的参数如下
    var users = context.Users.Where(u => u.FirstName == "firstname");
    context.Users.Update(users, u => new User {FirstName = "newfirstname"});<br><br>//当然了我最喜欢的还是这样的写法<br>context.Users.Where(u => u.FirstName == "firstname").Update(u=>new User{FirstName = "newfirstname"})

    批量查询

     其实现在的查询已经很棒了,默认的延迟查询都能满足基本需求,但是有时候总希望更极致一点,比如现有的查询无法满足分页这个顽固的需求。

    //看看EF EL怎么解决
    // 复用的查询
    var q = db.Tasks.Where(t => t.Priority == 2);
    // 获取总数
    var q1 = q.FutureCount();
    // 获取分页的数据
    var q2 = q.Skip(pageIndex).Take(pageSize).Future();
     
    // 这里会触发上面所有Future函数中的查询包装到一个连接中执行
    int total = q1.Value;
    //因为已经得到结果了,这里不会再次查询
    var tasks = q2.ToList();

     学习学习~~

  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/yuanyang/p/5583877.html
Copyright © 2011-2022 走看看