zoukankan      html  css  js  c++  java
  • Service之后

    Service之后紧接着就是一堆的单元测试。下面列出在Service中编写实现类的一些问题:

    ①、 在编写GetById()时应当检测的是Get的对象是否为null,因为Id是唯一的,所以得到的数据非“0”即“1”,,而在GetByPhoneNum()时则要检测数据的重复性,对于GetAll(),直接return,对于Update()使用EF时应当先把原来的数据删了再更新。

              var users = bs.GetAll().Include(u => u.City).AsNoTracking().Where(u => u.PhoneNum == phoneNum);
                    int count = users.Count();
                    if(count<=0)
                    {
                        return null;
                    }
                    else if(count ==1)
                    {
                        return ToDTO(users.Single());
                    }
                    else
                    {
                        throw new ApplicationException("找到多条手机号为" + phoneNum + "的管理员");
                    }
              var user = bs.GetAll().Include(u => u.City).AsNoTracking().SingleOrDefault(u => u.Id == id);
                    if(user==null)
                    {
                        return null;
                    }
                    return ToDTO(user);

    ②、AsNoTracking()的作用:https://www.cnblogs.com/zhaopei/p/5721789.html

    • AsNoTracking干什么的呢?无跟踪查询而已,也就是说查询出来的对象不能直接做修改。所以,我们在做数据集合查询显示,而又不需要对集合修改并更新到数据库的时候,一定不要忘记加上AsNoTracking
    • AsNoTracking和Select无关系。

     如果对于不需要修改的数据可以使用AsNoTracking()方法,对于使用AsNoTracking()的数据不能用于修改。

    ③、Linq延迟执行:http://www.cnblogs.com/lifepoem/archive/2011/10/29/2228589.html使用ToList、ToArray的目的是为了避免重复查询,ToArray把查询结果保存至一个Array,而ToList把结果保存至泛型List<>

    ④、实现一个ToDTO()应当声明为private

    ⑤、当用id查询到的数据为null时,应该抛一个ArgumentException;当用别的属性(非id)查询时,数据重复,应当抛个ApplicationException

    ⑥、单元测试的时候应当自己捕获异常,然后自己在catch中throw,这样才能看到异常信息

    ⑦、Where返回的IQueryable,IQueryable只有一些方法,因此点不出返回的元素的属性或方法(类型1 p =new 类型2)p有什么方法、属性是由类型1决定的,方法的实现则是由类型2中定义的方法去完成

    SingleOrDefault返回的类型则是序列中元素的类型(<TSource>),因此可以点出元素的方法和属性

  • 相关阅读:
    Integer Inquiry
    dfs求最短路径
    5.E
    5.H
    5.C
    5.A
    5.J
    POJ
    POJ
    POJ
  • 原文地址:https://www.cnblogs.com/HuShaoyi/p/8544841.html
Copyright © 2011-2022 走看看