【问题标题】:An error occurred while updating the entries. See the inner exception for details. - Asps.net MVC 3更新条目时出错。有关详细信息,请参阅内部异常。 - Asps.net MVC 3
【发布时间】:2011-09-13 09:46:10
【问题描述】:

每次我运行并尝试创建帖子时都会出现此异常..

我有一个简单的用户、帖子、评论、标签实体。它具有我定义的关系关联。当我检查 innerException 时,它说 "Cannot insert the value NULL into column 'CommentID', table " ... 并指向我定义了关系的上下文..请检查我的关系并帮助我找到我声明在评论 ID 中不允许 null 的地方...

  1. 1 个用户可以有很多帖子,可以创建很多标签,可以有很多 厘米
  2. 1 个帖子可以有 1 个用户,多个 cmets,并且可以有多个标签
  3. 1 个标签可以有 1 个用户,多个帖子
  4. 1 条评论可以有 1 个用户,1 个帖子

关系...

modelBuilder.Entity<User>().HasMany(p => p.Posts).WithRequired(u => u.Users).HasForeignKey(P=>P.UserID);
            modelBuilder.Entity<User>().HasMany(t => t.Tags).WithRequired(u => u.Users);
            modelBuilder.Entity<User>().HasMany(c => c.Comments).WithRequired(u => u.Users);

            modelBuilder.Entity<Post>().HasRequired(u => u.Users).WithMany(p=>p.Posts);
            modelBuilder.Entity<Post>().HasMany(t => t.Tags).WithMany(p => p.Posts);
            modelBuilder.Entity<Post>().HasOptional(c => c.Comments);


            modelBuilder.Entity<Comment>().HasRequired(u => u.Users);
            modelBuilder.Entity<Comment>().HasRequired(p => p.Posts);

            modelBuilder.Entity<Tag>().HasRequired(u => u.Users);
            modelBuilder.Entity<Tag>().HasMany(p => p.Posts).WithMany(t => t.Tags);

模型 - 用户

[ScaffoldColumn(true)]
        [Key]
        public int UserID { get; set; }

        [StringLength(15)]
        [DisplayName("First Name")]
        [Required(ErrorMessage="First Name is Required")]
        public string FirstName { get; set; }

        [StringLength(15)]
        [DisplayName("Last Name")]
        [Required(ErrorMessage = "Last Name is Required")]
        public string LastName { get; set; }

        [DataType(DataType.EmailAddress,ErrorMessage="please enter valid email")]
        [DisplayName("Email Address")]
        [Required(ErrorMessage = "Email is Required")]
        [Remote("CheckUniqueEmail","User",ErrorMessage="An account with this email address already exists.")]
        public string Email { get; set; }

        [DataType(DataType.Password)]
        [Required(ErrorMessage = "Password is Required")]
        public string Password { get; set; }

        [DataType(DataType.Date)]
        [ScaffoldColumn(true)]
        public DateTime JoiningDate { get; set; }

        [DataType(DataType.Date)]
        [ScaffoldColumn(true)]
        public DateTime? LastActivityDate { get; set; }

        public virtual ICollection<Post> Posts { get; set; }

        public virtual ICollection<Comment> Comments { get; set; }

        public virtual ICollection<Tag> Tags { get; set; }

模型 - 帖子

[Key]
        [ScaffoldColumn(true)]
        public int PostID { get; set; }

        [Required(ErrorMessage="Required")]
        [StringLength(250)]
        public string Title { get; set; }

        [Required(ErrorMessage="Required")]
        [DataType(DataType.MultilineText)]
        public string Body { get; set; }

        [DataType(DataType.Date)]
        public DateTime DateCreated { get; set; }

        [DataType(DataType.Date)]
        public DateTime DateModified { get; set; }

        [ScaffoldColumn(false)]
        public int UserID { get; set; }

        [ScaffoldColumn(false)]
        public int? CommentID { get; set; }

        [ScaffoldColumn(false)]
        public int? TagID { get; set; }

        public virtual ICollection<Comment> Comments { get; set; }

        public virtual User Users { get; set; }

        public virtual ICollection<Tag> Tags { get; set; }

模型 = 评论

[Key]
        [ScaffoldColumn(true)]
        public int CommentID { get; set; }

        [DisplayName("Your Comment")]
        public string Body { get; set; }

        [DataType(DataType.Date)]
        [ScaffoldColumn(true)]
        public DateTime DateCreated { get; set; }

        [ScaffoldColumn(true)]
        public int PostID { get; set; }

        [ScaffoldColumn(true)]
        public int UserID { get; set; }

        public User User { get; set; }

        public Post Posts { get; set; }

模型 = 标记

[Key]
        [ScaffoldColumn(true)]
        public int TagID { get; set; }

        [StringLength(15)]
        public string Name { get; set; }

        [ScaffoldColumn(true)]
        public int UserID { get; set; }

        public User Users { get; set; }

        public ICollection<Post> Posts { get; set; }

【问题讨论】:

  • 你能把你的模型贴在这里吗?

标签: asp.net-mvc entity-framework entity-framework-4


【解决方案1】:

您需要在此处发布您的模型以了解更多详细信息。但我可以看到您的模型配置存在几个问题。 正如你所说,

1 comment can have 1 user, 1 post

那么在Comment 中收集用户有什么意义

modelBuilder.Entity<Comment>().HasRequired(u => u.Users); 

应该是这样的

 modelBuilder.Entity<Comment>().HasRequired(u => u.User);

这也适用于Post。

【讨论】:

  • 感谢您的时间..请查看有问题的更新代码...thx
  • 啊好吧。第一件事是不要使用有意义的名字。您需要对单个实体使用单数术语。在帖子中`公共用户用户{获取;放; }` 应该是 public User User { get; set; } 。在帖子中保留“CommentId”的目的是什么?
  • 没错...没有必要将commentID放在帖子中..我想我将如何跟踪特定帖子的cmets..我可以使用帖子ID在cmets中进行跟踪.. ..我对吗 ? ..
  • 是的,你是对的。因为它是一对多的关系,所以您需要在 Comment 模型中拥有 PostId。
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多