我正在尝试找到一种比我现在使用的Linq更好更快的方法来插入相当大量的数据(~50K行)。 我正在尝试写入本地数据库的数据位于从WCF序列化和接收的ORM映射数据列表中。 我热衷于使用SqlBulkCopy,但问题是表是规范化的,实际上是具有一对多关系的序列或互连表。
这里有一些代码说明了我的观点:
foreach (var meeting in meetingsList)
{
int meetingId = dbAccess.InsertM(value1, value2...);
foreach (var competition in meeting.COMPETITIONs)
{
int competitionId = dbAccess.InsertC(meetingid, value1, value2...);
foreach(var competitor in competition.COMPETITORs)
{
int competitorId = dbAccess.InsertCO(comeetitionId, value1,....)
// and so on
}
}
}
其中dbAccess.InsertMeeting看起来像这样:
// check if meeting exists
int meetingId = GetMeeting(meeting, date);
if (meetingId == 0)
{
// if meeting doesn't exist insert new
var m = new MEETING
{
NAME = name,
DATE = date
}
_db.InsertOnSubmit(m);
_db.SubmitChanges();
}
提前感谢您的回答。 博
答案 0 :(得分:4)
我仍然会使用SqlBulkCopy
将您的数据从外部文件快速复制到与文件具有相同(平面)结构的临时表中(您需要创建)那张桌子提前)
加载后,您可以使用例如多个表格分割数据。存储过程或其他东西 - 应该非常快,因为服务器上的所有东西都已经存在。