none
EF Core (3.0) globales save/update Event RRS feed

  • Frage

  • Hallo Community

    Gibt es im EF Core, bei mir die Version 3, die möglichkeit bei jedem Save, oder auch Update, ein Event auszulösen?
    Ich will dazu nicht jede Entität anpassen müssen. Ich sollte bei jeder änderung eines Datensatzes den User und die Zeit im Record vermerken. Dazu müsste ich beim Event die Entität übergeben bekommen damit ich auf ein bestimmtes Interface prüfen kann.

    Ansätze dazu?

    Gruss

    Roland


    mfg GENiALi

    Dienstag, 15. Oktober 2019 06:24

Antworten

Alle Antworten

  • Hallo Roland,

    es gibt in EF Tracker Klasse in der auch 2 Events sind. Schau dir aber auch diese Unterhaltung auf Github an


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Dienstag, 15. Oktober 2019 22:47
  • Hi

    Habs jetzt mit einer Middleware und dem Tracker gemacht. Funktioniert einwandfrei.

    public async Task InvokeAsync(HttpContext httpContext, DbContext dbContext)
    {
        dbContext.ChangeTracker.StateChanged += (s, e) =>
        {
            if (e.Entry.Entity is ISimpleDomainObject && e.Entry.Entity is IIdentifiable)
            {
                string userName = httpContext.User.Claims.FirstOrDefault(c => c.Type == "username")?.Value;
                int id = ((IIdentifiable) e.Entry.Entity).Id;
    
                Tracking tracking = new Tracking(id, userName, DateTime.Now, e.Entry.Entity.GetType().Name, JsonConvert.SerializeObject(e.Entry.Entity));
                dbContext.Tracking.Add(tracking);
                dbContext.SaveChangesAsync();
            }
        };
    
        await _next(httpContext);
    }

    Gruss

    Roli


    mfg GENiALi

    Dienstag, 22. Oktober 2019 12:20