【发布时间】:2016-03-24 20:18:55
【问题描述】:
我是 EF 的半新手,我正在将 Windows 服务应用程序转换为使用 EF。它将读取一个包含 11k 员工的文本文件,并查看记录是否存在,然后进行插入或更新。
目前我正在遍历每一行,使用值创建一个新的实体对象,将其传递给数据类,然后在其中查找实体以查看它是否会插入或更新。事情是我正在调用 context.SaveChanges() 每条记录。
现在我想知道是否应该为所有员工创建一个实体列表。然后我会将该列表发送到数据类,遍历列表,设置修改后的状态或附加,然后在我浏览完整个列表后执行 SaveChanges。那会起作用吗?它只会调用一次插入/更新,还是仍然对所有记录进行 11k 次查询?
只是在寻找一种快速的方法来做到这一点。
foreach (string line in lines)
{
if (line.Trim().Length > 0)
{
SAP_DATES dateRecord = new SAP_DATES();
dateRecord.EMP = line.Substring(0, 8);
dateRecord.DATE_TYPE = line.Substring(10, 20);
dateRecord.DATE_VALUE = Convert.ToDateTime(line.Substring(30, 10));
dateRecord.DATE_MODIFIED = Convert.ToDateTime(line.Substring(40, 10));
Data.DataManager.ProcessDateRecord(dateRecord);
}
}
这是在我的数据类中
public static void ProcessDateRecord(SAP_DATES dateRecord)
{
using (DataContext db = new DataContext())
{
var original = db.SAP_DATES.Find(dateRecord.EMP, dateRecord.DATE_TYPE);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(dateRecord);
}
else
{
db.SAP_DATES.Add(dateRecord);
}
db.SaveChanges();
}
}
【问题讨论】:
-
是的,它会起作用 - 但出于性能原因,您应该尝试定期调用 SaveChanges(例如,每 500 或 1000 条记录)而不是在所有操作结束时调用。
-
考虑完全不使用 EF 进行导入。stackoverflow.com/questions/682015/…
标签: entity-framework entity-framework-6