将数据插入数据库时​​实体框架中的验证错误

Posted

技术标签:

【中文标题】将数据插入数据库时​​实体框架中的验证错误【英文标题】:Validation error in Entity framework when inserting data into the database 【发布时间】:2021-04-22 03:13:15 【问题描述】:

我正在尝试使用实体框架将分类数据插入到我的数据库中的Classifications 表中。问题是它给了我这个错误:

"一个或多个实体的验证失败。见 'EntityValidationErrors' 属性以获取更多详细信息。"

这是我的代码:

 public class Classifications
    
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Required]
        public virtual int id  get; set; 

        [Required]
        [MaxLength(250)]
        public virtual string Classification  get; set; 

        [ForeignKey("Movie")]
        [Required]
        public virtual List<Movie> Movies  get; set; 
        [Required]
        public virtual List<Series> Series  get; set; 
        [Required]
        public virtual List<Preference> Preferences  get; set; 

这是我添加分类的方法:

 public static void InsertClassification(string name)
        
            try
            
                var classification = new Classifications()  Classification = name ;
                using (var db = new DatabaseContext())
                
                    db.Classifications.Add(classification);
                    db.SaveChanges();
                    Console.WriteLine("Added Classification");
                
            catch(Exception ex)
            
                Console.WriteLine("Cound not add classification");
            
        

db.saveChanges() 上给出了错误。使用调试时,它会检查此方法,而是打印添加的数据消息,它会转到异常。

我在我的 Main 方法上运行它。

 class Program
    
        static void Main(string[] args)
        
           string name = "ClassificationTest";
           Classifications.InsertClassification(name);


        
    

有人可以帮我解决这个问题吗?

【问题讨论】:

这可能是由电影、系列和偏好顶部的 [Required] 标签引起的。 EntityValidationErrors 是什么?通过 Locals 窗口通过 ex 检查 在本地窗口中它只是说: System.Exception System.Data.Entity.Validation.DbEntityValidationException 是的,这是因为 [Required] 字段。 【参考方案1】:

您必须在 SaveChanges() 之前删除此属性的必需或创建这些列表

 [ForeignKey("Movie")]
        [Required]
        public virtual List<Movie> Movies  get; set; 
        [Required]
        public virtual List<Series> Series  get; set; 
        [Required]
        public virtual List<Preference> Preferences  get; set; 

【讨论】:

您愿意解释一下原因吗? 它已经写在我的答案中了。属性 [必需] 要求属性不应为空。例如 Movies=new List ...

以上是关于将数据插入数据库时​​实体框架中的验证错误的主要内容,如果未能解决你的问题,请参考以下文章

实体框架在重建时插入初始数据

需要使用实体框架将大量记录插入数据库

尽管提供了值,但实体框架仍插入 null

实体框架检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况

如何强制实体框架插入标识列?

实体框架不使用时态表