开发过程中遗漏的知识点(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 }

 

posted @ 2016-09-10 13:30  yhyboy  阅读(427)  评论(0编辑  收藏  举报