【发布时间】:2018-10-08 14:51:41
【问题描述】:
我是 EF 4.1 的新手,我正在尝试使用 EF 和 DB 优先方法将对象列表添加到 sql 表中。
1) 我应该在 AddObject(Trans) 之后在 for 循环内调用 context.SaveChanges() 还是可以在循环外调用它?
2) 另外,如果出现错误,所有事务都会回滚吗? 我看过实体框架已经支持原生数据库事务,如果任何脏的 ObjectStateEntry 对象不能被持久化,那么 ObjectContext.SaveChanges 会回滚事务并抛出异常。
3) 还可以做些什么来提高性能?我将一次性插入大约 1200 条记录。
try
{
using (TransactionModel context = new TransactionModel())
{
try
{
foreach (var item in lstUnAllocatedTransaction)
{
Transaction Trans = new Transaction();
Trans.Amount = item.Amount;
Trans.Date = Datetime.Now;
Trans.DateAllocated = null;
context.Transactions.AddObject(Trans);
}
context.SaveChanges();
}
catch (Exception ex)
{
}
}
}
catch (Exception ex)
{
}
}
【问题讨论】:
-
那么您示例中的
Transaction是业务对象,而不是数据库事务? -
不幸的是,EF 不支持所有批量操作。
-
Transaction 是一个实体,由 EF 自动生成的类(自定义工具)
-
我确实研究了批量操作选项,但不确定在一次添加 1.2k 或 1.4k 行时是否会注意到任何差异。我需要测试一下。
标签: c# .net entity-framework