一个或多个实体的验证失败以及其他错误

时间:2017-07-23 22:47:27

标签: c# wpf entity-framework

我试图更新我的实体,但它给我带来了这个错误:

一个或多个实体的验证失败。请参阅' EntityValidationErrors'财产了解更多详情。

这是我尝试更新的课程。

公共类产品:NotificationClass {

private string name;
private int minStock;
private Category category;
public Product()
{
    Category = new Category();
    User = new User();
}


public int ProductId { get; set; }
[Required]
public string Name
{
    get { return name; }
    set
    {
        name = value;
        OnPropertyChanged();
    }
}
[Required]
public decimal SellPrice { get; set; }
[Required]
public int MinStock
{
    get { return minStock; }
    set
    {
        minStock = value;
        OnPropertyChanged();
    }
}
public int Remove { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }

#region Relationships
public virtual Measurement Mesurement { get; set; }
public virtual Category Category
{
    get { return category; }
    set
    {
        category = value;
        OnPropertyChanged();
    }
}
public virtual User User { get; set; }
#endregion

}

我使用此代码进行更新:

using (MFSContext context = new MFSContext())
        {
            Product product = context.Products.Find(SelectedProduct.Id);

            product.Name = "Frank";

            context.Entry(product).State = EntityState.Modified;


try
            {
                context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                Exception raise = dbEx;
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        string message = string.Format("{0}:{1}",
                            validationErrors.Entry.Entity.ToString(),
                            validationError.ErrorMessage);
                        // raise a new exception nesting  
                        // the current instance as InnerException  
                        raise = new InvalidOperationException(message, raise);
                    }
                }
                throw raise;
            }

            context.SaveChanges();
            LoadCategories();
        }

我看到其他帖子建议使用try catch,但问题是当我运行项目时抛出这个异常"密码字段是必需的",问题是我上传了产品实体...该属性属于用户实体,因此我不理解。

PD:抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

您的产品实体正在创建用户实体。 User实体可能继承自需要密码的Identity类。对于插入,您需要使用UserManager添加用户,但由于这是一个更新,您需要做的就是在更新之前获取附加到产品的现有用户:

Product product = context.Products.Include(p => p.User).Single(p => p.ProductId  == SelectedProduct.Id);
product.Name = "Frank";
context.SaveChanges();