上篇文章是博主第一次使用.net+EF处理业务逻辑,也是第一次使用C#编写项目代码,作为一个copier,找到了一个可行的
方法在别人模块去copy了一个类似的数据获取方式来修改使用,结果算比较顺利,满足了业务逻辑。
今天在编写另一个类似功能的时候发现这个方法不好用了,具体分析一下
上一次完成业务逻辑的代码如下,主要的业务逻辑就是,
1,先判断是新增还是修改,当判断没有keyValue传递的时候认定为新增,
2,此时在判断新增的用户的一些不可重复的数据是否在数据库中已经被使用(例如用户名不能相同,员工编号不能相同等),
3,这里我采用了他areaApp.GetList()方法 里面通过service.IQueryable().ToList()获取了所有用户的完整信息,
4,我再生成一个与area实例化结构相同的treelist列表,
5,再通过赋值将数据库里的所有玩家的<用户名>数据添加到自己定义的treelist列表中,
6,再通过查询treelist列表中是否拥有和提交表单中相同的用户名,count计数为0说明没有该用户名,大于0说明该用户名已被占用。
//Controller模块 // 请求方式为post[HttpPost]//[HandlerAjaxOnly]// 请求伪造[ValidateAntiForgeryToken]public ActionResult SubmitForm(AreaEntity areaEntity, string keyValue){try{// 通过判断是否传递keyValue来确认用户操作是新建还是修改if (!string.IsNullOrEmpty(keyValue)){ // 调用SubmitForm用户数据修改函数areaApp.OldSubmitForm(areaEntity, keyValue);return Success("操作成功");}else{ // 调用GetList用户信息函数var data = areaApp.GetList();// 生成用户信息存储列表var treeList = new List<TreeSelectModel>();foreach (AreaEntity item in data){// 将用户名加入存储列表TreeSelectModel treeModel = new TreeSelectModel();treeModel.text = item.F_FullName;treeList.Add(treeModel);}// 将from表单数据里的名字和list列表里存储的用户名做判断// Count计数int nCount = treeList.Count(t => t.text == areaEntity.F_FullName);if (nCount > 0){return Success("操作失败,已有同名的数据对象。");}else{// 调用SubmitForm用户数据提交函数areaApp.NewSubmitForm(areaEntity);return Success("操作成功");}}}catch (Exception ex){throw (ex);}}// App模块 增删改查业务逻辑处理private IAreaRepository service = new AreaRepository();public List<AreaEntity> GetList(){// 获取所有数据return service.IQueryable().ToList();}public void OldSubmitForm(AreaEntity areaEntity, string keyValue){// 获取表单数据修改id为keyValue的数据areaEntity.Modify(keyValue);service.Update(areaEntity);}public void NewSubmitForm(AreaEntity areaEntity){// 获取表单数据新建数据areaEntity.Create();service.Insert(areaEntity);}
然后今天我想利用相同方法来在另一个模块中实现这一的去重功能时,发现在那个模块的getlist(string keyword)需要传递参数
这使得我在表单提交时可能不方便使用getlist方法,里面的service.IQueryable().ToList()也报错"请尝试指定类型",这是我只能尝试
使用其他方法来实现这个参数的校验,结合以前工作中使用python django框架来实现参数校验的思维,
只要能获取到数据集,只要能将数据库中校验字段的数据和提交的数据进行比较,就能实现校验rea
通过摸索,我发现了这个模块下的其他方法,service.FindEntity(t => t.F_FullName == AreaEntity.F_FullName)
这个方法其实就类似于mysql的 where F_FullName=AreaEntity.F_FullName 类似于django orm 的 objects.filter(FullName = AreaEntity.F_FullName)
当发现这个方法时,我才发现昨天那种校验参数的方法其实走了很多弯路,多写了很多代码,于是我来把它优化一下
else{ // 调用GetList用户信息函数var data = areaApp.GetList();// 生成用户信息存储列表var treeList = new List<TreeSelectModel>();foreach (AreaEntity item in data){// 将用户名加入存储列表TreeSelectModel treeModel = new TreeSelectModel();treeModel.text = item.F_FullName;treeList.Add(treeModel);}// 将from表单数据里的名字和list列表里存储的用户名做判断// Count计数int nCount = treeList.Count(t => t.text == areaEntity.F_FullName);if (nCount > 0){return Success("操作失败,已有同名的数据对象。");}else{// 调用SubmitForm用户数据提交函数areaApp.NewSubmitForm(areaEntity);return Success("操作成功");}}
这部分代码可优化成如下
else{AreaEntity ue = service.FindEntity(t => t.F_FullName == areaEntity.F_FullName);if (ue != null){return Success("操作失败,已有同名的数据对象。");}else{// 调用SubmitForm用户数据提交函数areaApp.NewSubmitForm(areaEntity);return Success("操作成功");}}
效率提升Max!共勉
如果觉得《C#学习笔记(四):.net 第一个业务逻辑(同名用户不可创建)(优化逻辑)》对你有帮助,请点赞、收藏,并留下你的观点哦!