2012-07-24 9 views
7

Déjenme explicar el título.Actualizaciones de datos de Entity Framework en un entorno multiusuario con base de datos central

Uso primero el código de Entity Framework en una aplicación (TestApp). Para fines de depuración, TestApp se conecta a una base de datos SQLExpress (servidor de base de datos central).

Para simplificar las cosas aquí, la base de datos contiene una tabla "Productos" y TestApp muestra todos los "Productos" de la base de datos en una cuadrícula de datos y TestApp puede agregar/eliminar un "Producto" o modificar el ProductName.

public class Product { 
public int ProductId { get; set; } 
public string ProductName { get; set; } 
} 

public DbSet<Product> Products { get; set; } 

que tengo para el ejemplo 3 de la PC donde TestApp está instalado y funcionando (llamaré Client_X). Si agrego un nuevo "Producto" a través de Client_1, entonces esto no es visible directamente en TestApp en Client_2 y Client_3. Solo cuando Client_2 y Client_3 recuperan todos los datos (actualización manual) de lo que veo el registro recién agregado.

Lo que quiero saber: ¿Cómo puedo saber los cambios en la base de datos a través de EF Code First? ¿Cómo harían Client_2 y Client_3 para que su cuadrícula de datos se actualice automáticamente porque se agregó o eliminó un nuevo elemento?

No estoy seguro de si se solicita demasiado, pero sería útil un simple proyecto de muestra o un código simple para demostrar esto.

FYI: Soy bastante nuevo en EF Code First. (estoy usando .NET 4.0 y EF Code First 4.3.1)

Gracias de antemano.

Esquema:

Client_3< 
     \ 
      \ 
      \ 
      \ 
      \> 
Client_1 <---> [Central Database] <----> Client_2 

actualización/Editar:

Ok, está claro que el propio marco de la entidad no realiza ninguna sincronización entre varios clientes.

Así que voy a hacer otra pregunta: estoy pensando en la forma de trabajo cliente-servidor:

  • Una aplicación de servidor único que crea la base de datos y utiliza el código de Entity Framework primero.
  • Múltiples clientes que se comunican con esa aplicación de servidor único .

    ¿Cuál sería ahora la mejor manera de asegurarse de que los clientes usen los mismos datos y se vean las actualizaciones/cambios? (Le agradecería ejemplos de código.)

+0

Encontré una pregunta relacionada: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-dandbase_datos-de-datos-de-datos – juFo

+0

Quiero hacer exactamente lo mismo, pero con una aplicación web . Tengo varios servidores web conectando a la misma base de datos: Prasad – Prasad

Respuesta

6

No hay nada que pueda usar para notificar a los clientes utilizando el marco de entidades. Puedes escribir una sobrecarga para SaveChanges, o crear un método de extensión, pero en la medida en que no tengas arquitectura cliente-servidor no puedo imaginar cómo puedes lograr esto.

Si utiliza WCF como su puerta de enlace a la base de datos, puede crear una comunicación dúplex entre su cliente y servidor y, como nuevos registros están disponibles, los clientes recibirían una notificación mediante Callback Channel.

Otro enfoque es el uso de MS SQL Service Broker Overview (Service Broker)

A pesar del hecho de que hay muchas maneras diferentes de obtener el resultado deseado, ninguno de ellos está relacionado con marco de la entidad, ya que es ORM ni un marco de aplicación o Marco de comunicación para aplicaciones creadas con .NET.

2

Esto no es responsabilidad de EF, es más abajo a su diseño general de la aplicación. Un fondo relativamente simple o un proceso de votación periódico resolvería su problema.

Existen más consideraciones cuando se trata de usuarios múltiples, como el bloqueo de registros y puede ser una buena idea investigar un poco sobre este aspecto y volver siempre que tenga un problema específico.

+0

¿El sondeo no parece una buena solución? Generando tráfico de red adicional. La base de datos tiene más trabajo y si un usuario está desplazándose en una cuadrícula de datos su vista sería, por ejemplo; cada minuto se reinicia debido a una actualización que carga todos los datos nuevamente. – juFo

+0

@juFo Son solo sugerencias, tendrá que hacer una investigación más general sobre entornos multiusuario y encontrar la mejor solución general, dependerá de muchos factores. Mi punto es que no es un problema de EF. – ChrisBint

+0

Entonces, ¿no hay absolutamente nada en EF que indique que su Contexto está desactualizado o que la base de datos tiene datos más nuevos? – juFo

Cuestiones relacionadas