2012-08-10 25 views
5

Soy nuevo en MVC y nuevo en el uso de EF. En nuestra aplicación, estamos utilizando el primer enfoque de la base de datos. Como usamos DB primer enfoque, estamos generando edmx desde el db.Primer uso de bases de datos en Entity Framework

Cuando genero el edmx, genera todos los relacionados clasificados para las tablas en mi base de datos. Aquí solo estoy confundiendo mucho sobre si usar la clase generada en mis vistas directamente o si debo crear una capa más de clases sobre la EF generada clasificada y usarlas desde mis controladores y vistas.

Si estoy creando una capa más de clases encima de las entidades, tengo que encargarme de mapear entre estas clases. Dudo que pueda haber un dolor en el futuro si hay algún cambio en el modelo.

Si uso directamente las entidades de mis controladores, creo que estoy exponiendo todo lo innecesario a los controladores y las vistas.

¿Alguien me puede aconsejar cómo proceder en esto?

Respuesta

3

lo está haciendo muy bien hasta qué punto lo tienes, no es necesario cambiarlo. Debería poder utilizar las clases generadas o si cree que está exponiendo demasiado, puede crear un modelo de vista que completará solo con los datos que le interesan y pasarlos a la vista. Así es como se supone que MVC funciona.

Digamos que tiene una tabla de base de datos llamado Articles y hay un montón de cosas ahí que no wa no para pasar a la vista, se podría crear un modelo vista como esta

public class ArticlesViewModel 
{ 
    [Required] // this is optional, just to give you an idea of validation 
    public string Title { get; set; } 
    public DataTime Date { get; set; } 
} 

ahora en su controlador que tendría algo como esto:

ArticlesViewModel articleVM = new ArticlesViewModel(); 
// populate it from your DB 

return View(articleVM); 

así que ahora su punto de vista sólo tiene la Title y Date, (también debe tener ID para que pueda recuperar la plena Article de la base de datos fácilmente.)

This le dará una idea de simplemente agarrar la información necesaria de su base de datos.

+0

Por lo tanto, aparte de la clase Articles, tiene la clase ArticlesViewModel y está exponiendo la clase de modelo para ver. Y en el momento de recuperar los datos en el primer paso, obtendrá artículos y desde los artículos recuperará ArticlesViewModel. Por favor, corríjame si estoy equivocado. – Naresh

+0

Sí, eche un vistazo a 'AccountModels.cs' en una aplicación MVC3 predeterminada. Estos solo exponen la información que el usuario puede ver y cambiar. Luego, en una publicación, actualiza la tabla 'Membresía' (creo). La membresía contiene muchas más propiedades que simplemente nombre de usuario, contraseña, etc. Espero que ayude. Ver http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-model –

2

Probablemente desee utilizar NuGet para instalar uno de los POCO (Objetos de C# simples - objetos que no tienen dependencias de otras funcionalidades como EF) para que pueda pasar sus objetos a la capa de Vista sin la capa de Vista requiriendo conocimiento de EF en absoluto.

Esto se denomina "separación de la preocupación" o "principio de responsabilidad única": sus Vistas saben cómo mostrar datos, su DAL sabe cómo recuperar y almacenar datos, y ninguno debe conocer las partes íntimas sobre cómo hacerlo el trabajo de los demás

Si pasa los objetos EF por la cadena, también debe pasar el conocimiento y las habilidades de EF por la cadena; el paso de las POCO pasa por alto esto.

Tome un vistazo a este tema SO:

Entity Framework 4/POCO - Where to start?

+0

En mi conocimiento, utilizamos POCO en el caso del enfoque Code First. Por favor, corríjame si estoy equivocado. – Naresh

+0

Al instalar un generador de POCO, puede usar POCO en proyectos de Base de datos: tengo varios proyectos importantes hechos de esta manera. – Moo

+2

¿El generador EF4.x DBContext es similar al generador POCO? – Naresh

Cuestiones relacionadas