EntityValidationErrors报告不正确

本文关键字:不正确 报告 EntityValidationErrors | 更新日期: 2023-09-27 18:11:03

我有一个案例,其中实体。savechanges()抛出一个DbEntityValidationException并声明

value字段是必需的",但是value属性已经被填充。

是否有其他可以检查的东西来确定为什么会抛出这个错误?

抛出错误的基本代码:
try
{
   var entities = new MyEntities();
   var item = (from i in entities.Item
               where i.Id == 1
               select i).First();
   item.AValue = "NewValue";
   entities.SaveChanges();
}
catch (DbEntityValidationException exception)
{
   var report = exception.Message();
}

我做了一些挖掘,在捕获中放入:

var x = item.AValue; // and it shows "NewValue"

var message = new StringBuilder();
 foreach (var entityValidationError in exception.EntityValidationErrors)
 {
   foreach (var validationError in entityValidationError.ValidationErrors)
   {
     object value = null;
     try { value = entityValidationError.Entry.CurrentValues.GetValue<object>(validationError.PropertyName); }
     catch (System.Exception exception) { value = null; }
     message.AppendLine(validationError.PropertyName + ": " + validationError.ErrorMessage + " (VALUE: " + (value ?? "-") + ")");
  }
}
return message.ToString();
// and i get "AValue: The AValue field is required. (VALUE: -) so that value item is null

我在这一点上很难办,只是不能弄清楚为什么在尝试期间看起来很好,但仍然抛出验证错误消息。还有什么我可以补充的来看看是否还有其他的事情发生吗?或者其他推荐的故障排除步骤?

EntityValidationErrors报告不正确

请验证Item.AValue在实体框架数据集定义中是否正确设置,以便它指向相关数据库表中的AValue列。如果由于某种原因缺少此选项,则在代码中设置它不会导致在Db中更新它,这可能导致此错误。

你的代码包含一些小语法错误:

var item = (from i in entities.Item
           where i.Id = 1
           select i).First();

应为(double == sign)

var item = (from i in entities.Item
           where i.Id == 1
           select i).First(); 

:

item.AValue = "NewValue"

后面应该跟一个";"符号。

我重新创建了一个小的例子,可以工作:

对象类:

public class Item
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

实体框架上下文类:

public class Context : DbContext
{
    public DbSet<Item> items { get; set; }
    public Context()
        : base("Demo")
    {
    }
}

第一次运行时,在数据库中添加一个项:

using (var ctx = new Context())
{
    Item stud = new Item() { Name = "Name" };
    ctx.items.Add(stud);
    ctx.SaveChanges();
}
现在,用下面的代码替换上面的代码:
try
{
    var entities = new Context();
    var item = (from i in entities.items
                where i.Id == 1
                select i).First();
    item.Name = "NewValue";
    entities.SaveChanges();
}
catch (DbEntityValidationException exception)
{
}

问题似乎是我的项目上有一个子对象也具有value属性,这就是抛出异常的对象。

是否有某种方式(通过DbEntityValidationException)报告它是什么对象?