Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
SaveChanges und die RETURNING-Klausel
Wenn EF Core Änderungen an der Datenbank speichert, erfolgt dies mit einer optimierten Technik mithilfe der SQL RETURNING-Klausel. Leider hat die RETURNING-Klausel einige Einschränkungen; Sie kann beispielsweise nicht mit virtuellen Tabellen oder Tabellen mit bestimmten Triggertypen verwendet werden.
Wenn Sie eine Einschränkung im Zusammenhang mit der Verwendung der RETURNING-Klausel haben, können Sie sie für eine bestimmte Tabelle über UseSqlReturningClauseFolgendes deaktivieren:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlReturningClause(false));
}
Dadurch wird EF zu einer älteren, weniger effizienten Technik für die Aktualisierung der Tabelle wechseln.
Wenn die meisten oder alle Tabellen Trigger haben, können Sie dies für alle Tabellen Ihres Modells mithilfe der folgenden Modellerstellungskonvention konfigurieren:
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);
}
}
}
}
Dadurch wird UseSqlReturningClause effektiv auf alle Tabellen Ihres Modells angewendet, anstatt es manuell für jede einzelne Tabelle auszuführen.