我有这个接收类型列表VentasLinias
并将每条记录插入数据库的方法
public void InsertLines(int idVenta , List<VentasLinias> listVentas)
{
foreach (VentasLinias vl in listVentas)
{
db.VentasLinias.Add(vl);
db.SaveChanges();
i++;
}
}
我对此有两个疑问,第一个是,SaveChanges()
我这样做是为了迭代还是在离开循环时?
另一个问题是,当我尝试保存时,它给了我这个错误:
EntityFramework.dll 中出现“System.Data.Entity.Validation.DbEntityValidationException”类型的异常,但未在用户代码中处理
附加信息:一个或多个实体的验证错误。有关更多详细信息,请参阅“EntityValidationErrors”属性。
如果我调试异常,我会看到这一点,但我看不到任何关于哪个字段让我失败的线索。
谢谢,
他
db.SaveChanges()
必须到外面去foreach
。原因是,对于每次调用,EF 都会创建一个事务SaveChanges()
并将未决的更改保留在上下文中,也就是说,如果您在每次迭代中都执行此操作,您将与数据库建立n 个连接,而不是仅与所有INSERT
关于
EntityvalidationError
这是因为您在尝试保存的实体中有一些验证错误,如果您添加类的代码,VentasLinias
我们可以看到问题所在