zoukankan      html  css  js  c++  java
  • MVC 下分离业务逻辑,优化修改

    1.使用数据库单例模式容易造成数据库连接冲突,因此最好的方案应该是访问一次数据库后应该马上断开连接。
    即使用Using。
    2.需要仓库,即实现接口的方法。
      public interface IUserDbRepository:IBaseDbRepository
      .......
      public class UserDbRepository : IUserDbRepository
     .........
    3.运用反射获取到对象类型再来各自处理
    4.建立空的对象,避免重复代码
    5.用字典来传递需要修改的属性 这样就比较灵活。 如果全部修改对象 容易造成错误
    6.深浅复制。copier
     
      public void Update<T>(int id ,Dictionary<string,object> dictionary )
            {
                using (var db = new NoteDb())  // using 在使用完成后自动释放资源,断开连接
                {
                    object obj=null;
                    switch (typeof(T).Name) // 反射获取类型  switch的作用只是获取到对象 obj
                    {
                        case "User":
                            obj=db.Users.SingleOrDefault(n => n.UserId == id);
                            break;
                        case "Permission":
                            obj = db.Permissions.SingleOrDefault(n => n.PermissionId == id);
                            break;
                        case "ManagerGroup":
                            obj = db.ManagerGroups.SingleOrDefault(n => n.GroupId == id);
                            break;
                    }
                    if (obj == null) return;
                    foreach (var element in dictionary)
                    {
                        ObjectCopier.CopyProperty(obj,element.Key,element.Value);
                    }
                    db.SaveChanges();
                }
    获取类的类型用 typeof(obj).name 获取引用类型的 用 t.GetType().Name

    前台调用:
      public ActionResult Edit(int id, User user)
            {
                var dictionary = new Dictionary<string, object>
                    {
                        {"TrueName", user.TrueName},
                        {"Sex", user.Sex},
                        {"Position",user.Position},
                        {"PostionDesc",user.PostionDesc},
                        {"Password",user.Password},
                        {"ConfirmPassword",user.ConfirmPassword},
                        {"PhoneNumber",user.PhoneNumber},
                        {"CreatorId",user.CreatorId},
                        {"CraetorName",user.CraetorName}
                    };
                UserRepository.Update<User>(id,dictionary);
                return RedirectToAction("Index");
     
            }
    

      


  • 相关阅读:
    android studio 模拟器关机重启操作
    一个大小写引发的灾难 --碎片的最佳实践4.5章节
    安卓项目一直卡在Project setup: reading from cache
    Android Studio制作九宫格位图(Nine-patch)
    android studio添加依赖
    安卓模拟器emulator-5554[OFFLINE]
    GPS翻转周期
    Android Studio 可视化界面 (Design)和文本界面(Text)的切换
    全国-地区-邮政编码
    全国-省-市-编码
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/3008688.html
Copyright © 2011-2022 走看看