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

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

    也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对IQueryable<T>的扩展,而不是DbSet<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();
    当第一次看到EF EL的时候就被这种写法吸引住了,这不就是我们一直找的东西么。

    批量更新

    //批量更新用户名中包含大写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();
  • 相关阅读:
    Android 3.0 r1 API中文文档(108) —— ExpandableListAdapter
    Android 3.0 r1 API中文文档(113) ——SlidingDrawer
    Android 3.0 r1 API中文文档(105) —— ViewParent
    Android 中文 API (102)—— CursorAdapter
    Android开发者指南(4) —— Application Fundamentals
    Android开发者指南(1) —— Android Debug Bridge(adb)
    Android中文API(115)——AudioFormat
    Android中文API(116)——TableLayout
    Android开发者指南(3) —— Other Tools
    Android中文API (110) —— CursorTreeAdapter
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5566163.html
Copyright © 2011-2022 走看看