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

    批量删除

    本来我们需要这样删除

    //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"});

    //当然了我最喜欢的还是这样的写法
    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();

    原文地址:http://www.xuebuyuan.com/496432.html or https://msdn.microsoft.com/zh-cn/library/dn220211(v=vs.113).aspx

  • 相关阅读:
    Ubuntu环境下IPython的搭建和使用
    智能移动导游解决方案简介
    企业文化、团队文化与知识共享
    CoinPunk项目介绍
    Insight API开源项目介绍
    比特币Bitcoin源代码安装编译
    Javascript单元测试Unit Testing之QUnit
    Node.js的UnitTest单元测试
    Node.js调试
    Alfresco 4 项目介绍
  • 原文地址:https://www.cnblogs.com/wu-peng/p/5563020.html
Copyright © 2011-2022 走看看