【发布时间】:2019-09-22 09:15:05
【问题描述】:
早上好。我正在使用 Blazor 3 preview 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>
}
更新 3 我已经这样做了,但没有任何改变。
using (var context = new PlutoneContext())
{
var a = context.Azienda.Find(azienda.Codice);
if (a != null)
{
context.Azienda.Remove(a);
context.SaveChanges();
}
StateHasChanged();
}
【问题讨论】:
-
"然后我重新加载数据" - 多久之后?看看你如何在这里调用这些异步方法会有所帮助。
-
作为诊断,`int n = await context.SaveChangesAsync();` 并验证
n == 1 -
@HenkHolterman 在执行删除命令后立即执行。该行被删除,因为当我重新加载窗口时,删除的行丢失了。
-
显示“紧接着”的代码。这闻起来像是一个异步问题。
-
上传完整代码:-)
标签: c# asp.net frameworks entity blazor