如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2598字,纯文字阅读大概需要4分钟。
内容图文
我正在使用递归函数来保存和更新记录,但是它花费了太多时间-大约需要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;
另外,您应该一次从数据库获取所有数据.在递归时,您不应进入数据库.这不是最佳实践.
内容总结
以上是互联网集市为您收集整理的如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?全部内容,希望文章能够帮你解决如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。