2010-01-02 10 views
12

Me gustaría usar EF y MVVM y estoy tratando de ver cómo encajan. No encuentro mucho en el camino de los ejemplos, así que espero que ustedes puedan responder algunas preguntas.¿Cómo hacer que Entity Framework y MVVM jueguen bien juntos?

Digamos que tengo una sola tabla en una base de datos llamada Cliente. Dirijo el diseñador EF y obtengo un modelo de datos.

El siguiente paso es ejecutar algunos linq para obtener datos del modelo de datos. Vamos a crear una nueva clase llamada CustomerRepository para hacer esto.

Ahora supongo que el Modelo llamaría a CustomerRepository.GetCustomers para obtener una lista de clientes.

Aquí está mi pregunta: CustomerModel tiene una lista de objetos de clientes que fueron definidos por EF en el modelo de datos. ¿Cómo agrego atributos de validación o algún tipo de validación?

Parece que hay una pequeña desconexión entre EF y MVVM. Estoy seguro de que algunos de ustedes han golpeado esto antes, ¿alguna idea? ¿Alguna mejor forma de acercarte a esto?

Saludos

Steve

Respuesta

4

La validación, las reglas de negocio, la presentación de su objeto cliente debe vivir en el modelo de vista que servirá como un controlador o presentador para su Vista.

En cuanto a la forma de crear ese modelo de vista, tiene un par de opciones:

  1. incluyen el modelo como una propiedad de la máquina virtual, y pasar la instancia de modelo en el constructor de la máquina virtual. A continuación, puede exponer las propiedades del Cliente y simplemente transferirlas a las propiedades correspondientes del Modelo subyacente.
  2. Genere un modelo de vista usando plantillas T4 y Reflection (o preferiblemente Introspection) para 'leer' el modelo y generar las propiedades que se asignarán directamente a él.

Ahora puede agregar reglas de validación personalizadas a la VM, de modo que cuando se envía el comando apropiado desde la Vista puede realizar sus reglas comerciales y actualizar el Modelo utilizando la API de EF para mantener esos cambios volver a la base de datos ...

+2

Interesante. Siempre pensé que la validación específica del modelo, como por ejemplo, el género, debería estar en el modelo, pero la validación en un nivel superior: las cosas que involucran propiedades múltiples u otros objetos deberían estar en el modelo de vista. Una de mis principales cosas que quiero hacer es evitar tener que volver a hacer frente a las propiedades del cliente varias veces. Se define automáticamente para mí en el modelo de datos, por lo que tener que volver a hacerlo en el modelo y luego volver a conectarlo en la máquina virtual para volver a conectar parece que estoy trabajando para mí cuando la base de datos cambia. La introspección parece interesante para esto. –

Cuestiones relacionadas