Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityValidationErrors报告不正确_C#_.net_Entity Framework - Fatal编程技术网

C# EntityValidationErrors报告不正确

C# EntityValidationErrors报告不正确,c#,.net,entity-framework,C#,.net,Entity Framework,我遇到了entities.SaveChanges()抛出DbEntityValidationException并声明 AValue字段是必需的”,但已填充AValue属性 是否还可以检查其他内容以确定引发此错误的原因 引发错误的基本代码: try { var entities = new MyEntities(); var item = (from i in entities.Item where i.Id == 1 sel

我遇到了entities.SaveChanges()抛出DbEntityValidationException并声明

AValue字段是必需的”,但已填充AValue属性

是否还可以检查其他内容以确定引发此错误的原因

引发错误的基本代码:

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(异常中的变量entityValidationError.EntityValidationErrors)
{
foreach(entityValidationError.ValidationErrors中的var validationError)
{
对象值=空;
请尝试{value=entityValidationError.Entry.CurrentValues.GetValue(validationError.PropertyName);}
catch(System.Exception异常){value=null;}
message.AppendLine(validationError.PropertyName+”:“+validationError.ErrorMessage+”(值:“+(值??”)”+”);
}
}
返回消息.ToString();
//我得到“AValue:AValue字段是必需的。(值:-)使值项为空

在这一点上我很困惑,只是不明白为什么它在尝试过程中看起来很好,但仍然抛出一条验证错误消息。还有什么我可以补充的,看看是否还有其他事情发生吗?或任何其他建议的故障排除步骤?

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

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

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")
    {
    }
}
现在,将上述代码替换为以下代码:

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)
{
}

问题似乎在于我的项目中有一个子对象也具有AValue属性,而这就是引发异常的子对象


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

AValue的数据库类型是什么?我会确保您正在提取的实体列表中没有一个实体的AValue为空。AValue是一个字符串(数据库中的nvarchar(150)),当我从数据库中提取数据时,它有一个现有值“USER1”从实体框架方面看很好(这是模型的第一个数据库创建)…我在使用类似代码之前保存了值…我确信我做了一些稍微偏离的事情,但不知道是什么。
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)
{
}