10

OK, esta puede ser una pregunta para principiantes, pero ¿cómo y dónde puedo suscribirme al evento ObjectContext.SavingChanges como se menciona, por ejemplo, en este post?Código EF Primero: ¿Dónde puedo encontrar el evento SavingChanges?

tengo sólo dos clases relevantes en mi aplicación de demostración: La clase "País" y una clase que contiene las "definiciones" Código EF Primero:

internal class TestDb : DbContext 
{ 
    public DbSet<Country> Countries { get; set; }  
} 

Cualquier indicio es muy apreciada.

Respuesta

10

Usted debe ser capaz de hacer esto:

internal class TestDb : DbContext 
{ 
    public void SetSavingChanges(EventHandler evt) 
    { 
      var oc = this as IObjectContextAdapter; 
      oc.ObjectContext.SavingChanges -= evt; 
      oc.ObjectContext.SavingChanges += evt; 
    } 

    public DbSet<Country> Countries { get; set; } 
} 
+1

no entienden completamente su sintaxis, pero el principal parece ser la La mejor manera para mí. La verdadera pregunta es si hay una forma aún mejor de usar EF 4.1. –

+0

@SanderRijken - ¿Qué sintaxis no entiendes? Es bastante sencillo. DbContext implementa la interfaz 'IObjectContextAdapter', que tiene una propiedad llamada ObjectContext. Lanzas 'this' al adaptador, luego usas su propiedad ObjectContext para establecer el evento. –

+1

'(evento evt)'. Probablemente exponga el evento como 'evento público EventHandler SavingChanges {add {((IObjectContextAdapter) this) .ObjectContext.SavingChanges + = value; } remove {((IObjectContextAdapater) this) .ObjectContext.SavingChanges - = value; }} ' –

2

Según lo que puedo ver en MSDN, DbContext envuelve una instancia de ObjectContext como fachada, sin exponer este evento específico.

Sin embargo, DbContext tiene un constructor overload que toma un ObjectContext - se puede usar esto para pasar en un ObjectContext y suscribirse al evento SavingChanges en él.

using(ObjectContext context = new ObjectContext(myConnectionString)) 
{ 
    using(DbContext dbContext = new DbContext(context, true)) 
    { 

    } 
} 
0

Otra forma puede ser, por ejemplo:

Public Class MainForm 

    Private WithEvents myObjectContext As ObjectContext 
    Private myDbContext As DbContext 

... 

    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load 
    myDbContext = New DbContext 
    myObjectContext = CType(myDbContext, IObjectContextAdapter).ObjectContext 

... 


    Private Sub ObjectContextSavingChanges(sender As Object, e As EventArgs) Handles myObjectContext.SavingChanges 

    'Your code hear 

    End Sub 
Cuestiones relacionadas