(个人理解:passwordHash、passwordSalt应该不能放在DTO中,因为DTO需要在各层之间传输,不安全。)
①、DTO需要哪些属性,取决于使用者需要哪些属性。
②、IService的实现。对GetById(long id)的理解:因为id是唯一的,所以调用之后应该判断结果是否为空。而对于GetByPhonNum(string phoneNum)来说,phoneNum在数据库是可以有重复的,所以调用完函数之后,除了判断是否为空,还应该判断是否有多个结果。例如:
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 + "的管理员"); }
注意:
一、Include()是为了一次性把数据都加载出来。
二、AsNoTracking是为了不然外部对已经查询出来的数据进行修改而导致数据库的数据发生改变。
三、Select、SelectMany的区别https://www.cnblogs.com/itjeff/p/3368627.html