Derzeit (der neueste offizielle EF Core v1.1.2) gibt es keine öffentliche Alternative. Es gibt Pläne, freizulegen, aber laut EF Core Roadmap sind sie verschoben und werden in der kommenden Version 2.0 nicht verfügbar sein.
Zum Glück EF-Core setzt alle internen Infrastruktur Klassen/Interfaces, so konnte ich die folgende Problemumgehung unter der typischen EF Kerneinbauten Nutzungs Haftungsausschluss
Diese API unterstützt die Entity Framework Core-Infrastruktur legen nahe, und ist nicht dazu gedacht, direkt aus deinem Code verwendet werden. Diese API wird möglicherweise in zukünftigen Versionen geändert oder entfernt.
Was habe ich im Sinn der Microsoft.EntityFrameworkCore.ChangeTracking.Internal
Namespace wird verwendet, und insbesondere die ILocalViewListener
-Schnittstelle, die die folgende Methode
void RegisterView(Action<InternalEntityEntry, EntityState> viewAction)
Die viewAction
können Sie delegieren registrieren bereitstellt, die auf jedem Entitätsstatus aufgerufen wird Änderung, einschließlich Anfügen, Hinzufügen, Löschen, Entfernen etc.
So in Ihrem DbContext
abgeleiteten Klassenkonstruktor, könnten Sie erhalten ILocalViewListener
Service und wieder gister die Handler wie folgt aus:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
using Microsoft.EntityFrameworkCore.Infrastructure;
public class MyDbContext : DbContext
{
// ...
public MyDbContext()
{
this.GetService<ILocalViewListener>()?.RegisterView(OnStateManagerChanged);
}
void OnStateManagerChanged(InternalEntityEntry entry, EntityState previousState)
{
if (previousState == EntityState.Detached && entry.EntityState == EntityState.Unchanged)
{
// Process loaded entity
var entity = entry.Entity;
}
}
}
im Handler, können Sie auch die InternalEntityEntry.ToEntityEntry()
Methode verwenden, um das regelmäßige EntityEntry
Objekt (ähnlich DbContext.Entry
und ChangeTracker.Entries
Methoden) zu erhalten, wenn Sie es vorziehen, mit ihm arbeiten, anstatt der internen InternalEntityEntry
Klasse .
Getestet und funktioniert in EF Core v1.1.2.
Große Antwort. Funktioniert wie ein Chef. Kleine Korrektur entry.ToEntityEntry(). Entity gibt Ihnen die reguläre Entität. Ich hätte dir das Kopfgeld schon gegeben, aber SO sagt ich muss 12 Stunden warten. – Murdock
Gern geschehen, froh, dass es geholfen hat :) Was mit 'ToEntityEntry' gemeint ist, wollte ich das" normale "' EntityEntry'-Objekt zum Arbeiten bringen (und nicht den 'InternalEntityEntry'). Aber 'InternalEntityEntry' hat die Eigenschaft 'Entity', die auch die reguläre Entität liefert, also ist' ToEntityEntry' wirklich beliebig. –
In der Tat :). Ich wollte nur diesen Eintrag hinzufügen. ToEntityEntry(). Entity gibt Ihnen die tatsächliche Entität aus Ihrer Domäne. – Murdock