• 开发过程中遗漏的知识点(1)


    1 EF的级联删除

    默认情况下CodeFirst会在外键约束中设置 删除规则 为级联(不会默认设置 更新规则 为级联)
    当仅定义了导航属性如
    public virtual CategoryCategory{ get; set; }
    而没有显示定义外键如
    public int CategoryId { get; set; }
    CodeFirst不会设置 删除规则 为级联

     比如下面就不会级联 否则就是级联 删除的时候就哗哗全删了

     1 public class Blog:BaseEntity<int>
     2     {
     3        [Required(ErrorMessage = "{0}是必须的")]
     4        [Display(Name = "博客标题")]
     5        [StringLength(50, ErrorMessage = "长度必须少于{1}个字")]
     6        public string Title { get; set; }
     7 
     8        [Required(ErrorMessage = "{0}是必须的")]
     9        [Display(Name = "描述")]
    10        [StringLength(1000, ErrorMessage = "长度必须少于{1}个字")]
    11        public string Summary { get; set; }
    12  
    13        [Required(ErrorMessage = "{0}是必须的")]
    14        public string Content  { get; set; }
    15 
    16        [Required(ErrorMessage = "{0}是必须的")]
    17        [Display(Name = "创建时间")]
    18        public DateTime CreateTime { get; set; }
    19 
    20        [Required(ErrorMessage = "{0}是必须的")]
    21        [Display(Name = "阅读量")]
    22        public int Volume { get; set; }
    23 
    24         [Display(Name = "是否发布")]
    25        public bool Publish { get; set; }
    26 
    27        /// <summary>
    28        /// 栏目
    29        /// </summary>
    30        public virtual Category.Category Category { get; set; }
    31   
    32     
    33        //public int CategoryId { get; set; }  //如果显示添加外键 便支持级联 此处不希望级联
    34     }

    2 AutoMapper 给已有对象赋值

    AutoMapper 是ODT第三方类库

    他默认是new一个对象赋值的

    比如:

    1  Blog blog;
    2 blog = Mapper.Map<Blog>(addBlogViewModel);

    当我们的blog已经存在其他属性时也会覆盖 ,如果我们不希望这样就要写成:

     Blog blog = blogManager.Find(id);
    //在原对象基础上赋值
     blog = Mapper.Map<ModifyBlogViewModel, Blog>(modifyBlogViewModel, blog);

    3 使用TryUpdateModel注意点

    如下代码:我从VIEW获取 Category的信息 使用TryUpdateModel

     Category _category = categoryManager.Find(id);
     if (TryUpdateModel(_category))
      {          
               执行更新操作出错
      }

    最后发现,我在视图中使用了多个Model产生的同名属性,把另一个Model的属性赋值给了我这个Model,本例是ID同名, 所以出错。

    代码修改如下:

    1  Category _category = categoryManager.Find(id);
    2  if (TryUpdateModel(_category, new string[] { "Type", "ParentID", "Name", "Description", "Order", "Target" }))
    3 { 
    4    更新操作成功!
    5 }
  • 相关阅读:
    halcongen_region_contour_xld轮廓转化成区域
    fit_circle_contour_xld拟合圆
    关于.Net Core下因客户端主动取消导致Request请求[FromBody]模型绑定读取异常BadHttpRequestException
    Java有了synchronized,为什么还要提供Lock
    源码详解数据结构Linked List
    CVE20213129:Laravel远程代码漏洞复现分析
    缓存最关心的问题是什么
    如何使用Java AWT 创建一个简易计算器
    聊聊数仓中TPCDDS&TPCH与查询性能的那些事儿
    6张图为你分析Kafka Producer 消息缓存模型
  • 原文地址:https://www.cnblogs.com/yhyboy/p/5859244.html
Copyright © 2020-2023  润新知