TryUpdateModelAsync打开和关闭连接1000次

时间:2017-06-15 16:16:33

标签: entity-framework asp.net-core

我有一段代码......

class GRFBlogExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

       $adminMenuKey     = 'adminmenu';
       $coreAdminMenu    = $container->getParameter($uiMapKey);
       $loader           = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
       $loader->load('services.yml');
       $branchAdminMenu  = $container->getParameter($adminMenuKey);
       $groupedAdminMenu = $coreAdminMenu + $branchAdminMenu;
       $container->setParameter($adminMenuKey, $groupedAdminMenu);
    }
}

......以前工作得相当快。现在,同一段代码非常缓慢。有时需要10-15秒才能完成。

使用...

TryUpdateModelAsync(tn.IT_Task, "IT_Task");

...为了输出后台发生的事情,我发现该方法几乎打开和关闭数据库1000次。对我来说,至少和我一样多,IT_Task"记录。也许更多。以下输出的小样本......

发生了什么?如何在从视图集合更新的模型上获得单条记录?

DB.ITConsole.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

更新 - 我尝试使用TryUpdateModelAsync做什么?

据我所知,我的知识,TryUpdateModelAsync只会做一件事。如果我错了,请道歉。

我已经根据数据库中的特定记录创建了一个模型,并在该页面上创建了一些下拉菜单等支持材料,然后在GET阶段将其发送到页面进行编辑。然后在POST阶段,我根据相同的记录创建另一个(相同的)模型。

TryUpdateModelAsync旨在从返回POST获取数据并使用该数据更新原始记录,然后我可以保存它。

我真的不希望这个过程完全查看数据库来合并这两组数据。我只希望在SaveChanges上访问数据库。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,其中TryUpdateModelAsync占用的时间太长而无法返回。我认为问题是它试图遍历我的数据库对象上的所有子集合,并且EF6在整个过程中延迟加载所有内容。这似乎是这种情况,因为我通过关闭延迟加载来实现它,然后通过这样做从数据库中获取对象:

 _database.Configuration.LazyLoadingEnabled = false;