zoukankan      html  css  js  c++  java
  • EntityFramewrok 使用

    1.使用一些查询比较复杂或者需要拼接的查询的时候最好一直保持IQueryable。一直到最后取数据的时候才进行查询。例如分页之类的条件拼接。

           var query = dbset.Where(expression);
                query = IsDESC ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression);
                PageData<T> pageData = new PageData<T>();
                pageData.TotalCount = query.Count();
                pageData.DataList = query.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();

    2.使用AsNoTracking可以让查询效率更高一些查询出来的东西不会放在缓存里进行追踪处理。

    db.TestInfo.Where(e=> e.AName == "张三").AsNoTracking().ToList()

    3.在查询后对外键关联处理比较多的情况下用Include进行预加载,效率会更高。

           var list = db.TestInfo.Where(e => e.AName.Contains("")).Include("TestGroup").ToList();
                foreach (var item in list)
                {
                    string groupName = item.TestGroup.GroupName;
                }

    4.批量修改网上有个扩展库挺好用的。EntityFramework.Extended,它提供了批量删除,批量修改等功能。

    批量更新:

    var query = db.TestInfo.Where(e => e.AName == "2014");
    query.Update(e => new TestInfo { AName = "1215" });

    将TestInfo里所有AName等于2014的AName改成1215

    批量删除:

    db.TestInfo.Where(e=> e.AName=="2014").Delete();

    5.批量添加网上也有个扩展库。EntityFramework.BulkInsert插入速度很快10000条数据,1秒就ok了,虽然ef提供了AddRange,但是需要40多秒钟等待。

           TestInfo testInfo;
                for (int i = 0; i < 10000; i++)
                {
                    testInfo = new TestInfo();
                    testInfo.ID = Guid.NewGuid();
                    testInfo.AName = "2014";
    
                    testInfo.GID = new Guid("D9B3DC41-C584-4BA7-8443-A2F71309740A");
                    list.Add(testInfo);
                }
                db.BulkInsert(list);
                //db.TestInfo.AddRange(list);
                //db.SaveChanges();
  • 相关阅读:
    导弹拦截版
    [USACO1.5]数字三角形 Number Triangles
    FBI树
    修复公路
    台阶问题
    阶乘问题
    连续自然数和
    又是毕业季I
    生活大爆炸版石头剪刀布
    曹冲养猪
  • 原文地址:https://www.cnblogs.com/ariklee/p/3938094.html
Copyright © 2011-2022 走看看