Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
ZapiszZmiany i klauzula RETURNING
Gdy program EF Core zapisuje zmiany w bazie danych, robi to przy użyciu zoptymalizowanej techniki przy użyciu klauzuli SQL RETURNING. Niestety, klauzula RETURNING ma pewne ograniczenia; Nie można jej używać z tabelami wirtualnymi lub tabelami z określonymi typami wyzwalaczy, na przykład.
Jeśli wystąpi ograniczenie związane z użyciem klauzuli RETURNING, możesz wyłączyć ją w określonej tabeli za pomocą polecenia UseSqlReturningClause:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlReturningClause(false));
}
Dzięki temu program EF przełączy się na starszą, mniej wydajną technikę aktualizowania tabeli.
Jeśli większość lub wszystkie tabele mają wyzwalacze, można to skonfigurować dla wszystkich tabel modelu przy użyciu następującej konwencji tworzenia modelu:
public class NoOutputClauseConvention : IModelFinalizingConvention
{
public virtual void ProcessModelFinalizing(
IConventionModelBuilder modelBuilder,
IConventionContext<IConventionModelBuilder> context)
{
foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
{
var table = StoreObjectIdentifier.Create(entityType, StoreObjectType.Table);
if (table is not null)
{
entityType.Builder.UseSqlReturningClause(false);
}
foreach (var fragment in entityType.GetMappingFragments(StoreObjectType.Table))
{
entityType.Builder.UseSqlReturningClause(false, fragment.StoreObject);
}
}
}
}
Automatyzuje wywoływanie UseSqlReturningClause dla wszystkich tabel modelu, oszczędzając ręczny wysiłek wykonywania tego dla każdej z nich.