Soft-Delete-Implementierung von Entity Framework, die den Datenbankabfangserver nicht verwendet

8

Ich habe ein Datenbank-Softdelete implementiert (ein boolesches Flag, das Einträge als gelöscht markiert) mit dem folgenden Tutorial: Ссылка

Es scheint mir eine sehr gute Implementierung zu sein, da nach dem Einrichten von soft delete auf ein Modell angewendet wird, indem einfach eine [SoftDelete("IsDeleted")] Annotation hinzugefügt wird. Das Problem ist, dass es nicht funktioniert.

Die Quelle scheint zuverlässig zu sein, und sie haben sogar ein Beispiel ihrer Lösung veröffentlicht: Ссылка

Können Sie sich meinen Code ansehen, falls ich etwas falsch gemacht habe, als ich das weiche Löschen auf mein Projekt angewendet habe?

Das ist das Modell:

%Vor%

ApplicationDbContext.cs:

%Vor%

ApplicationDbConfiguration.cs

%Vor%

SoftDeleteAttribute.cs:

%Vor%

SoftDeleteInterceptor.cs

Ich habe festgestellt, dass SoftDeleteAttribute.GetSoftDeleteColumnName(deleteCommand.Target.VariableType.EdmType) das Soft-Delete-Attribut nicht findet und null zurückgibt. Aber ich weiß nicht warum.

%Vor%

IdentityConfig.cs

%Vor%     
nest 21.01.2016, 20:47
quelle

2 Antworten

7

Es gibt einen Fehler in ApplicationDbContext.cs:

%Vor%

Sie verwenden "new" anstelle von "override", damit OnModelCreating nie ausgeführt wird (versuchen Sie, einen Haltepunkt hinzuzufügen, um es zu überprüfen). So wird AttributeToTableAnnotationConvention niemals ausgeführt und Entitätsanmerkungen werden nie hinzugefügt.

Ändern zu

%Vor%

wird es funktionieren lassen

    
tede24 25.01.2016, 21:51
quelle
1

Nun, Sie Code scheint mir gut. Vielleicht gibt es einen kleinen Fehler, der deine App kaputt macht. Du könntest das versuchen:

  1. Entfernen Sie die SoftDeleteAttribute von BC_Instance

  2. Bearbeiten Sie die Methode OnModelCreating

    %Vor%
  3. Löschen Sie ApplicationDbConfiguration class

  4. Bearbeiten Sie den Konstruktor des Kontexts

    %Vor%

Hoffe, das hilft!

    
Fabio Luz 25.01.2016 20:45
quelle