Я сохраняю и обновляю записи с помощью рекурсивной функции, но она использует слишком много времени - около 2 минут для сохранения записей.Я использую Entity Framework для доступа к базе данных.
Рекомендуется наилучшая практика для Entity Framework
Существует N уровня дочерних элементов, поэтому мы не знаем, сколько у нас детей, поэтому я попытался вызвать db.savechange()
после завершения рекурсивного анализа.но не повезло.
У меня есть этот скелет кода типа (он не оригинален, я только что добавил структуру).
public void parentFunction(List<DataListforupdate> dataListforupdates, string defaultvalue, Guid perentguid)
{
if (dataListforupdates != null && dataListforupdates.Count() >)
{
foreach (var model in dataListforupdates)
{
// manipulate data for save
saveDateInDB(model.value, model.value, model.value, model.value);
if (model.child.count() > 0)
{
ChildFunction(model.child.dataListforupdates, defaultvalue, perentguid)
}
}
}
else
{
var getAllDataForupdate = db.tbl.where(x => x.gID = perentguid).toList();
foreach (var model in getAllDataForupdate)
{
// manipulate data for save
saveDateInDB(defaultvalue, model.value, model.value, model.value);
if (model.child.count() > 0)
{
ChildFunction(model.child.dataListforupdates, defaultvalue, perentguid)
}
}
}
}
public void ChildFunction(List<DataListforupdate> dataListforupdates, string defaultvalue, Guid perentguid)
{
// update model date if its not null
if (dataListforupdates != null && dataListforupdates.Count() >)
{
foreach (var model in dataListforupdates)
{
// manipulate data for save
saveDateInDB(model.value, model.value, model.value, model.value);
if (model.child.count() > 0)
{
ChildFunction(model.child.dataListforupdates, defaultvalue, perentguid)
}
}
}
// if model date is null then update all record with default value
else
{
var getAllDataForupdate = db.tbl.where(x => x.gID = perentguid).toList();
foreach (var model in getAllDataForupdate)
{
// manipulate data for save
saveDateInDB(defaultvalue, model.value, model.value, model.value);
if (model.child.count() > 0)
{
ChildFunction(model.child.dataListforupdates, defaultvalue, perentguid)
}
}
}
}
public void saveDateInDB(string value1, string value2, string value3, string value4)
{
var getAddedData = db.DataFromTable.where(x => x.id = value1).FirstOrDefault()
if (getAddedData != null)
{
// update date using db.savechanges()
}
else
{
// Add date using db.savechanges()
}
}
это проблема скорости, потому что я вызываю db дляполучить список в каждой рекурсии?