情况: 我将很多xlsx文件导入到mysql数据库中,我想使用EF6。连接工作,我可以导入。然而,出了点问题,我觉得我错过了一个至关重要的部分。
class Importer
{
public string ImportExcercise(C_patient patient, C_excercise excercise, List<C_breath> breaths, int PatientHasMultipleExercises)
{
try
{
using (var dbentries = new bxbEntities())
{
if (PatientHasMultipleExercises == 0)
{
dbentries.C_patient.Add(patient);
dbentries.SaveChanges();
Console.WriteLine("Added Patient...");
}
excercise.C_patientID = patient.C_patientID;
dbentries.C_excercise.Add(excercise);
dbentries.SaveChanges();
int exerid = excercise.C_excerciseID;
Console.WriteLine("Added Excercise...");
int i = 0;
foreach (C_breath b in breaths)
{
b.C_excerciseID = exerid;
dbentries.C_breath.Add(b);
Console.WriteLine("Added BxB record {0}...", i);
i++;
}
dbentries.SaveChanges();
}
return "import success!";
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
}
return "";
}
}
我这样叫这个转换器:
public string StrokePatientExecFolder(string Folder)
{
string[] files = Directory.GetFiles(Folder);
int i = 0;
while (i<files.Length)
{
if (!((File.GetAttributes(files[i]) & FileAttributes.Hidden) == FileAttributes.Hidden))
{
xlsdata data = new xlsdata();
Console.WriteLine("File: {0}", files[i]);
data.xlsread(files[i]);
StrokePatientConverter(data);
Importer imp = new Importer();
imp.ImportExcercise(p, e, b, i);
b.Clear();
i++;
}
}
return "converted!";
}
所以这就是出错:第一次一切顺利。当导入第二个文件(或至少是呼吸)时,它们被添加到dbentries中存在的前一组呼吸中。我澄清一下:第一个xlsx包含250次呼吸 - 它们被导入。第二个文件包含300次呼吸 - &gt;导入550次呼吸,所有呼吸均使用相同的excerciseID。
到目前为止我尝试了什么: 1)我试图调用dbentries.Dispose();但我发现由于'使用阻止',这是多余的。 2)首先,进口商imp = new Importer();全球宣布。然后我在while循环的每次迭代中在本地声明它,以确保对象为空。令我惊讶的是,事实并非如此。 3)我在dbentries上添加了一块手表。 第一次迭代:dbentries.C_breath - &gt;在foreach循环之前 - &gt;计数= 0.在foreach循环之后 - &gt; count = 250。 第二次迭代:dbentries.C_breath - &gt;在foreach循环之前 - &gt; Count = 250(这怎么可能?应该处理DBContext?)。在foreach循环之后 - &gt; count = 550.
我觉得我在这里缺少一些基本的东西。这是我的第一个EF6项目...希望你们能帮助我!