2016-05-31 7 views
-1

Ich versuche SaveChanges DbContect mit Entity Framework zu überschreiben.DbContext Override SaveChanges nicht feuern

Die

Überschreibung Savechanges int()

nicht ausgeführt wird und der Knickpunkt wird nicht getroffen wird.

Ich habe die Klasse in den Stamm verschoben, wo sich die EDMX-Datei befindet, aber das hat immer noch nicht geholfen. Wie kann ich die SaveChanges override funktionieren?

using System; 
using System.Data.Entity; 

namespace DAL 
{ 
    public class MyEntities : DbContext 
    { 
     public override int SaveChanges() 
     { 
      throw new Exception("override DbContext>SaveChanges working"); 
      // return base.SaveChanges(); 
     } 
    } 
} 

-Code Savechanges

using (var ctx = new Entities()) 
      { 
       // model.clientID = data.clientID; 
       // model.clientGUID = data.clientGUID; 
       model.clientName = data.clientName; 
       model.clientDept = data.clientDept; 
       model.clientWebsite = data.clientWebsite; 
       model.clientEmail = data.clientEmail; 
       model.isActive = data.isActive; 
       model.clientModDate = data.clientModDate; 
       model.clientCreatedDate = data.clientCreatedDate; 

       ctx.Clients.Add(model); 
       ctx.SaveChanges(); 
      } 

File/Solution code

+0

Rufen Sie die 'SaveChanges()' Methode irgendwo auf? Können Sie den Anrufcode anzeigen? – bassfader

+0

@bassfader Frage aktualisiert mit Codebeispiel von SaveChange() –

+3

Ihr Aufrufcode instanziiert 'Entitäten', was nicht mit der von Ihnen geposteten 'MyEntities' Klasse übereinstimmt. – sstan

Antwort

0

Der einfachste Weg zu nennen: die EF-Klasse mit "teilweise" definiert ist. So fügen Sie eine weitere Klassendatei mit dem Klassennamen Wesen:

public partial class MyEntities 
{ 
    public void SavingChanges() 
    { 
     //Do custom code 

     this.SaveChanges(); 
    } 
} 

Und alle Ihre SaveChanges() Anrufe SavingChanges() ändern. Dann können Sie den Prozess beliebig anpassen. Der Schlüssel besteht darin, eine weitere Teilklasse hinzuzufügen. Stellen Sie daher sicher, dass der EF-Kontext teilweise definiert ist (nicht in Ihrem Codebeispiel, sondern die Standardimplementierung).

0

Ich konnte den Code mit den bereitgestellten Kommentaren arbeiten.

  1. Erstellen Sie die Klassendatei im selben Projekt wird die EDMX
  2. öffentliche Teilklasse Entities befindet < --- gleichen Namen wie Projekt Entity

jetzt alles funktioniert!