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