如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?
作者:互联网
我正在使用递归函数来保存和更新记录,但是它花费了太多时间-大约需要2分钟才能保存记录.我正在使用实体框架进行数据库访问.
欢迎使用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获取列表的速度问题?
解决方法:
I have tried call db.savechange() after completion of recursive but
no luck for this.
SavingChanges()一次想提高应用程序性能,而不是对每个孩子进行savechanges.它没有任何意义.在递归时,您只应将实体的状态更改为已修改.您也可以禁用更改跟踪.
Configuration.AutoDetectChangesEnabled = false;
context.Entry(entity).State = EntityState.Modified;
另外,您应该一次从数据库获取所有数据.在递归时,您不应进入数据库.这不是最佳实践.
标签:entity-framework-6,c,asp-net-mvc 来源: https://codeday.me/bug/20191108/2006019.html