码迷,mamicode.com
首页 > 其他好文 > 详细

EF 外键问题

时间:2015-07-31 10:18:12      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

    在做一个评论功能的时候,发现用户的id不对,打开数据库一看,莫名其妙的新增了几个用户。明显是将外键中的用户新增到用户表中了。

   技术分享

   评论表:

   技术分享

   

public class CourseComment : BaseModel
    {
        public string Content { get; set; }

        [ForeignKey("UserId")]
        public virtual User FormUser { get; set; }

        public virtual int UserId { get; set; }

        public virtual CourseComment ReplayComment { get; set; }

        /// <summary>
        /// 父组
        /// </summary>
        public int CourseId { get; set; }

        [Required]
        [ForeignKey("CourseId")]
        public virtual Course Course { get; set; }

    }

 

    var user = GetUserById(id);
    var com = new CourseComent() { Content = comment, CourseId = id, FormUser = user };
    _comRepository.Add(com);

//add
public bool Add(CourseComent comment) { if (comment == null || string.IsNullOrEmpty(comment.Content)) return false; _db.CourseComents.Add(comment); _db.SaveChanges(); return true; }

而原因就是user和comment不是在一个上下文中。 修改一下add方法:

 public bool Add(CourseComent comment)
        {
            if (comment == null || string.IsNullOrEmpty(comment.Content)) return false;

            var u = _db.Users.Find(comment.FormUser.Id);
             comment.FormUser = u;
             _db.CourseComents.Add(comment);
            _db.SaveChanges();
            return true;
        }

这个时候添加 就不会出现新增了。我们也可以看到两个对象的哈希值是不一样的。

技术分享

我曾试图重写对象的对比方法和GetHashGode方法,让这两个值一样只要是id相同的话。但EF还是不识别,不知道它判断的对象的方法是什么。在有外键的操作中,一定要保持在同一个上下文中,也是同一个db对象下。

 

EF 外键问题

标签:

原文地址:http://www.cnblogs.com/stoneniqiu/p/4691245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!