编程语言
首页 > 编程语言> > 如何在C#的递归函数或其他可用选项中使用db.savechange()函数提高实体框架中数据保存的性能?

如何在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