我试图更新我的实体,但它给我带来了这个错误:
一个或多个实体的验证失败。请参阅' 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:抱歉我的英语不好。答案 0 :(得分:0)
您的产品实体正在创建用户实体。 User实体可能继承自需要密码的Identity类。对于插入,您需要使用UserManager添加用户,但由于这是一个更新,您需要做的就是在更新之前获取附加到产品的现有用户:
Product product = context.Products.Include(p => p.User).Single(p => p.ProductId == SelectedProduct.Id);
product.Name = "Frank";
context.SaveChanges();