Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架上下文未刷新_C#_Asp.net_Frameworks_Entity_Blazor - Fatal编程技术网

C# 实体框架上下文未刷新

C# 实体框架上下文未刷新,c#,asp.net,frameworks,entity,blazor,C#,Asp.net,Frameworks,Entity,Blazor,早上好。我用的是Blazor3预览版9。实际上,如果不使用F5重新加载整个页面,我无法刷新上下文。我已经在使用分离的上下文。如果删除具有以下内容的行: using (var context = new PlutoneContext()) { context.Azienda.Remove(azienda); await context.SaveChangesAsync(); } 然后

早上好。我用的是Blazor3预览版9。实际上,如果不使用F5重新加载整个页面,我无法刷新上下文。我已经在使用分离的上下文。如果删除具有以下内容的行:

 using (var context = new PlutoneContext())
            {
                context.Azienda.Remove(azienda);
                await context.SaveChangesAsync();
            }
然后我用

 using (var context = new PlutoneContext())
            {
                var query = context.Azienda.AsNoTracking().ToList().Where(a =>
                                                            a.Codice.ContainsCaseInsensitive(_filtroCodice) &&
                                                            a.RagioneSociale.ContainsCaseInsensitive(_filtroRagioneSociale) &&
                                                            a.PartitaIva.ContainsCaseInsensitive(_filtroPartitaIva) &&
                                                            a.CodiceFiscale.ContainsCaseInsensitive(_filtroCodiceFiscale) &&
                                                            a.Telefono.ContainsCaseInsensitive(_filtroTelefono) &&
                                                            a.Email.ContainsCaseInsensitive(_filtroEmail)).ToList();

                if (_direzioneOrdinamento == DirezioneOrdinamento.Ascendente)
                    query = query.OrderBy(a => a.GetType().GetProperty(_colonnaOrdinamento).GetValue(a, null)).ToList();
                else
                    query = query.OrderByDescending(a => a.GetType().GetProperty(_colonnaOrdinamento).GetValue(a, null)).ToList();

                _numeroRighe = query.Count;
                _numeroPagine = query.Count() / 10;
                if (query.Count() % 10 != 0) _numeroPagine++;

                _aziende = query.Skip((_pagina - 1) * 10).Take(10).ToList();
            }
删除的行仍然存在。但我已经在处理和使用2个上下文。我还使用AsNoTracking()取消了缓存

我怎样才能修好它

更新1

 protected override async Task OnInitializedAsync()
    {
        CaricaTabella();
    }

    private void CaricaTabella()
    {
        try
        {
            using (var context = new PlutoneContext())
            {
                var query = context.Azienda.AsNoTracking().ToList().Where(a => 
                                                            a.Codice.ContainsCaseInsensitive(_filtroCodice) &&
                                                            a.RagioneSociale.ContainsCaseInsensitive(_filtroRagioneSociale) &&
                                                            a.PartitaIva.ContainsCaseInsensitive(_filtroPartitaIva) &&
                                                            a.CodiceFiscale.ContainsCaseInsensitive(_filtroCodiceFiscale) &&
                                                            a.Telefono.ContainsCaseInsensitive(_filtroTelefono) &&
                                                            a.Email.ContainsCaseInsensitive(_filtroEmail)).ToList();

                if (_direzioneOrdinamento == DirezioneOrdinamento.Ascendente)
                    query = query.OrderBy(a => a.GetType().GetProperty(_colonnaOrdinamento).GetValue(a, null)).ToList();
                else
                    query = query.OrderByDescending(a => a.GetType().GetProperty(_colonnaOrdinamento).GetValue(a, null)).ToList();

                _numeroRighe = query.Count;
                _numeroPagine = query.Count() / 10;
                if (query.Count() % 10 != 0) _numeroPagine++;

                _aziende = query.Skip((_pagina - 1) * 10).Take(10).ToList();
            }
        }
        catch (Exception ex)
        {
            _caricamento = false;
        }

        _caricamento = false;
    }

    private void Ordina(string colonna)
    {
        if (_colonnaOrdinamento != colonna)
        {
            _colonnaOrdinamento = colonna;
            _direzioneOrdinamento = DirezioneOrdinamento.Ascendente;

            CaricaTabella();
        }
        else
        {
            if (_direzioneOrdinamento == DirezioneOrdinamento.Ascendente)
                _direzioneOrdinamento = DirezioneOrdinamento.Discendente;
            else
                _direzioneOrdinamento = DirezioneOrdinamento.Ascendente;

            CaricaTabella();
        }
    }

    private async void Cancella(Azienda azienda)
    {
        if (!(await JavaScriptInterop.MessageBoxConferma("Vuoi davvero cancellare l'azienda " + azienda.RagioneSociale + "?")))
            return;

        try
        {
            using (var context = new PlutoneContext())
            {
                context.Azienda.Remove(azienda);
                context.SaveChanges();
                StateHasChanged();
            }
        }
        catch (Exception ex)
        {
            await JavaScriptInterop.MessageBox("Si è verificato un errore durante la cancellazione dell'azienda");
            return;
        }

        CaricaTabella();
    }
更新2

@foreach (var azienda in _aziende)
                    {
                        <tr>
                            <td>@azienda.Codice</td>
                            <td>@azienda.RagioneSociale</td>
                            <td>@azienda.PartitaIva</td>
                            <td>@azienda.CodiceFiscale</td>
                            <td>@azienda.Email</td>
                            <td>@azienda.Telefono</td>
                            <td>
                                <button class="btn btn-primary" @onclick="(() => Modifica(azienda))"><i class="fa fa-edit"></i></button>
                                <button class="btn btn-danger" @onclick="(() => Cancella(azienda))"><i class="fa fa-trash"></i></button>
                            </td>
                        </tr>
                    }

你好,先生。从这个上下文很难说。 也许在这里

            {
                context.Azienda.Remove(azienda);
                await context.SaveChangesAsync();
            }
未跟踪
azienda
?这也可能是在上述调用中使用
async void
声明的方法

对我来说,使用状态就像一种代码味道。您可以使用(内置)DI来处理DbContext的生存期


顺便说一句,在第二部分中,您正在将每个数据加载到内存中
context.Azienda.AsNoTracking().ToList()
之后,您将对加载的数据集而不是SQL server自身应用筛选。在一个大数据集中,这可能会消耗大量内存,并且查询计算会很慢。

您好,先生。从这个上下文很难说。 也许在这里

            {
                context.Azienda.Remove(azienda);
                await context.SaveChangesAsync();
            }
未跟踪
azienda
?这也可能是在上述调用中使用
async void
声明的方法

对我来说,使用状态就像一种代码味道。您可以使用(内置)DI来处理DbContext的生存期


顺便说一句,在第二部分中,您正在将每个数据加载到内存中
context.Azienda.AsNoTracking().ToList()
之后,您将对加载的数据集而不是SQL server自身应用筛选。在大型数据集中,这可能会消耗大量内存,并且查询计算会很慢。

“稍后我会重新加载数据”-要多久?看看您在这里如何调用这些异步方法会有所帮助。作为诊断,int n=await context.savechangessync();`并在执行remove命令后立即验证
n==1
@HenkHolterman。该行被删除,因为当我重新加载窗口时,删除的行丢失。显示“紧随其后”的代码。这闻起来像是一个异步问题。完整的代码上传:-)“然后我重新加载数据”-要多久?看看您在这里如何调用这些异步方法会有所帮助。作为诊断,int n=await context.savechangessync();`并在执行remove命令后立即验证
n==1
@HenkHolterman。该行被删除,因为当我重新加载窗口时,删除的行丢失。显示“紧随其后”的代码。这听起来像是一个异步问题。完整代码上传:-)我正在检查对象是否被跟踪。关于性能,是的,我知道客户执行可能会导致缓慢。但如果我不这样做,我会在运行时收到一个异常,说“LINQ表达式无法翻译。要么以可以翻译的形式重写查询,要么通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算”,重点关注问题,您如何告诉UI(blazor组件)发生了变化?可能是您弄乱了双向绑定,或者组件
statehaschange()
中的一个简单调用可能会被忽略,只是尝试了statehaschange(),它不起作用。但是,在第二次删除之后,第一行消失了,第二行也有同样的问题:-我正在检查对象是否被跟踪。关于性能,是的,我知道客户执行可能会导致缓慢。但如果我不这样做,我会在运行时收到一个异常,说“LINQ表达式无法翻译。要么以可以翻译的形式重写查询,要么通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算”,重点关注问题,您如何告诉UI(blazor组件)发生了变化?可能是您弄乱了双向绑定,或者组件
statehaschange()
中的一个简单调用可能会被忽略,只是尝试了statehaschange(),它不起作用。但是,在第二次删除之后,第一行消失了,我对第二行也有同样的问题:-D