将数据保存在具有许多条件的 SQL 中,然后从 SQL 中检索数据进行比较,然后再保存每条记录



条件是如果此记录已经存在, 如果此记录中的电子邮件有效或位于另一个表中。 我正在通过上传数据并循环到记录中来循环 Excel 工作表中的数据 我的代码运行良好并保存在数据库中,但问题是完成工作需要很长时间,例如比较和保存 4k 条记录需要 200 天...... 我需要更好的方法

var Email = dt.Rows[j][3].ToString();
List<AllBounced> bounce = cnx.AllBounceds.Where(x => x.Email == Email).ToList();
List<MainField> mainfield = cnx.MainFields.Where(x => x.Email == data.Email).ToList();
List<MainField> mainfield2 = cnx.MainFields.Where(x => x.Phone == data.Phone || x.Mobile == data.Mobile).ToList();
if (data.Email != null)
{
if (IsEmailValid(Email) == true)
{
if (mainfield.Count != 0)
{
MainFieldsDuplicate data2 = new MainFieldsDuplicate
{
Id = Guid.NewGuid(),
FirstName = dt.Rows[j][0].ToString(),
MiddleName = dt.Rows[j][1].ToString(),
LastName = dt.Rows[j][2].ToString(),
Email = dt.Rows[j][3].ToString(),
Phone = dt.Rows[j][4].ToString(),
Mobile = dt.Rows[j][5].ToString(),
a= dt.Rows[j][6].ToString(),
b= dt.Rows[j][7].ToString(),
c= dt.Rows[j][8].ToString(),
d= dt.Rows[j][9].ToString(),
e= dt.Rows[j][11].ToString(),
f= dt.Rows[j][12].ToString(),
j= dt.Rows[j][14].ToString(),
isDeleted = 0,
h= dt.Rows[j][13].ToString(),
Date = GetDateTime(dt.Rows[j][10].ToString()),
};
cnx.MainFieldsDuplicates.Add(data2);
cnx.SaveChanges();
}
else
{
if (bounce.Count != 0)
{
data.isBounce = true;
}
else
{
data.isBounce = false;
}
data.isValid = true;
cnx.MainFields.Add(data);
cnx.SaveChanges();
}
}
else
{
if (mainfield.Count != 0)
{
MainFieldsDuplicate data2 = new MainFieldsDuplicate
{
Id = Guid.NewGuid(),
FirstName = dt.Rows[j][0].ToString(),
MiddleName = dt.Rows[j][1].ToString(),
LastName = dt.Rows[j][2].ToString(),
Email = dt.Rows[j][3].ToString(),
Phone = dt.Rows[j][4].ToString(),
Mobile = dt.Rows[j][5].ToString(),
a= dt.Rows[j][6].ToString(),
b= dt.Rows[j][7].ToString(),
c= dt.Rows[j][8].ToString(),
d= dt.Rows[j][9].ToString(),
e = dt.Rows[j][11].ToString(),
f= dt.Rows[j][12].ToString(),
j= dt.Rows[j][14].ToString(),
isDeleted = 0,
h = dt.Rows[j][13].ToString(),
Date = GetDateTime(dt.Rows[j][10].ToString())
};
cnx.MainFieldsDuplicates.Add(data2);
cnx.SaveChanges();
}
else
{
if (bounce.Count != 0)
{
data.isBounce = true;
}
else
{
data.isBounce = false;
}
data.isValid = false;
cnx.MainFields.Add(data);
cnx.SaveChanges();
}
}
}
else
{
if (mainfield2.Count != 0)
{
MainFieldsDuplicate data3 = new MainFieldsDuplicate
{
Id = Guid.NewGuid(),
FirstName = dt.Rows[j][0].ToString(),
MiddleName = dt.Rows[j][1].ToString(),
LastName = dt.Rows[j][2].ToString(),
Email = dt.Rows[j][3].ToString(),
Phone = dt.Rows[j][4].ToString(),
Mobile = dt.Rows[j][5].ToString(),
a= dt.Rows[j][6].ToString(),
b= dt.Rows[j][7].ToString(),
c= dt.Rows[j][8].ToString(),
d= dt.Rows[j][9].ToString(),
e= dt.Rows[j][11].ToString(),
f= dt.Rows[j][12].ToString(),
j= dt.Rows[j][14].ToString(),
isDeleted = 0,
h= dt.Rows[j][13].ToString(),
Date = GetDateTime(dt.Rows[j][10].ToString())
};
cnx.MainFieldsDuplicates.Add(data3);
cnx.SaveChanges();
}
else
{
cnx.MainFields.Add(data);
cnx.SaveChanges();
}

您可能希望分析您的应用程序以确定需要优化的部分,例如仅使用秒表类。

在您的案例中,主要嫌疑人是对上下文的调用,即SaveChangesWhere/ToList. 您可以尝试的一件事是避免在每次迭代中对上下文调用SaveChanges,请参阅此问题。 另一件事是(如果可行(将AllBouncedMainField列表预先加载到内存中。

相关内容

最新更新