【发布时间】:2016-07-20 23:49:53
【问题描述】:
因为我已经从上下文MICSYDBCONTEXT 的数据库中导入数据到BRIA_REALDBCONTEXT 的数据库中。
由于MICSYDBCONTEXT 数据库中有 280'000 条记录,我发现仅导入 10000 条记录需要 5 个小时,因此我迫切需要对我的查询进行某种优化。我正在使用 Entity Framework 6,作为初级开发人员,我将不胜感激。
using (var context = new MICSYDBContext())
{
var Doc = context.DOCUMENTS.OrderBy(x => x.ID).Take(100);
try
{
using (var context2 = new BRIA_REALDBCONTEXT())
{
Stopwatch sw = Stopwatch.StartNew();
foreach (var item in Doc)
{
var DOC = new DLV_DOC();
DOC.FOLDID = item.ID;
DOC.FOBJECT = 1;
DOC.FIO = 40;
DOC.FID = newId;
DOC.FACTIVE = "Y";
DOC.FCODEWRT = 85;
DOC.FDOC_COUNT_ORIGINAL = 'N';
DOC.FUSERINSERT = 85;
DOC.FMODULE = 1;
DOC.FSERVICE_TYPE = 1;
var micsysserviceName = context.DEFDOCTYPE.Where(x => x.ID == item.DOCTYPE).FirstOrDefault();
if (micsysserviceName != null)
{
var service = context2.DLV_SSERVICE.Where(x => x.FNAME == micsysserviceName.NAME && x.FSERVICE_TYPE == 1).FirstOrDefault();
if (service != null)
{
DOC.FSERVICE = service.FID;
}
}
else
{
DOC.FSERVICE = 1;
}
var personcorespondent = context2.UCM_PERSON.Where(x => x.FOLD_ID == item.DOCKORID.ToString()).FirstOrDefault();
if (personcorespondent != null)
{
DOC.FPERSON = personcorespondent.FID;
}
else
{
DOC.FPERSON = 142;
}
DOC.FDATEDOC = item.DATA;
foreach (var docsteps in context.DOCMOVE.Where(x => x.DOCID == item.ID).OrderBy(x => x.DATA))
{//СТъпка
DLV_DOC_STEP DLVSTEP = new DLV_DOC_STEP();
DLVSTEP.FDOC = DOC.FID;
DLVSTEP.FOBJECT = 1;
DLVSTEP.FCODEWRT = 85;
var whofirst = context2.UCM_PERSON.Where(x => x.FOLD_ID == docsteps.WHOFIRST.ToString()).FirstOrDefault();
if (whofirst != null)
{
DLVSTEP.FPERSON = whofirst.FID;
}
var whonext = context2.UCM_PERSON.Where(x => x.FOLD_ID == docsteps.WHONEXT.ToString()).FirstOrDefault();
if (whonext != null)
{
DLVSTEP.FTOPERSON = whonext.FID;
}
context2.DLV_DOC_STEP.Add(DLVSTEP);
}
context2.DLV_DOC.Add(DOC);
i++;
Console.WriteLine("Added " +i + "DOC");
}
context2.SaveChanges();
Console.WriteLine("End of docs");
Console.WriteLine(sw.Elapsed.Hours);
}
}
catch (Exception ex)
{
string s = ex.Message;
Console.WriteLine("Problem with record");
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
Console.WriteLine(ex.InnerException);
}
}
【问题讨论】:
-
您要订购 280000 条记录。这需要一段时间。
标签: c# entity-framework-6