2012-05-22 13 views
6

Estoy leyendo un libro escrito por Julie Lerman en Code First. Según el libro, las anotaciones y la api fluida dan el mismo resultado. Todo depende del estilo del desarrollador.Primero, el código: ¿la API api influye en la IU?

Sé que las anotaciones permiten configurar cómo el código genera objetos de base de datos y cómo MVC personaliza los elementos de la interfaz de usuario. Digamos que uso [Required, MaxLength (50)]. El atributo generará un NOT NULL, nvarchar (50) en la base de datos. También validará la entrada para ese campo.

[Required, MaxLength(50)] 
public string Name { get; set; } 

Qué sucede si decido usar primero la Fluent API para configurar el código. ¿Seguiré necesitando anotaciones para influir en los elementos de la interfaz de usuario o usar API con fluidez va a ser suficiente?

EDITAR

¿Qué hay de anotaciones, como la exhibición que sirven sólo para propósitos de interfaz de usuario? ¿Tienen equivalentes? Si no, ¿tendré que usar las anotaciones?

[Display(Name = "Date of Birth")] 
public DateTime BirthDate { get; set; } 

Gracias por ayudar a

Respuesta

9

La anotación de datos es la forma más simple de decirle a una clase que aplique alguna regla de validación. También puede hacer lo mismo con la API Fluent.Algunas personas, como lo hace mediante anotaciones de datos y algunas personas como él haciendo con API fluida

razones para gustan con anotaciones de datos

1) Mantenga la información de validación de mi entidad en un solo lugar junto con el definición de la entidad

razones para gustan con API Fluido

1) Mantener mi entidad limpio. Solo tendrá la información de mi propiedad. Sin información de validación POCO limpio y simple Escribiré la validación en el método OnModelCreating en mi clase de contexto de datos.

No puede hacer todas las cosas de la API de Fluent con la forma de anotaciones de datos. De la misma forma que no tiene pocos atributos de anotación de datos, el equivalente no está presente con la forma de API de Fluent (Ej: HasMinLength). HasMinLength es algo que haremos para la validación de nuestro modelo, que generalmente tiene sentido en la interfaz de usuario.

Para la validación del modelo de interfaz de usuario, no puede usar solo la API Fluent. La función principal de la API fluida es observar la configuración fluida que escribimos y actuar al crear el Modelo (Base de datos) de las entidades. Recuerde que estamos anulando el método OnModelCreating para escribir nuestra configuración de API. Entonces, para la Validación de UI (de mi ViewModel), utilizaría la forma de DataAnnotation y usaría la API con fluidez si quiero definir algo relacionado con mi modelo de datos como Definir una clave foránea o Asignar esta entidad a una Tabla con un nombre diferente, etc.

eDIT: de acuerdo con la edición de preguntas,

Usted debe hacer uso de las anotaciones de datos en este caso. Si está haciendo código primero. Puede recordar que esa entidad va a ser su tabla de base de datos (por supuesto, puede decirle a EF que ignore/renombre columnas específicas). En ese caso, mantendría mi Entities limpio y Crearé un ViewModel que usaré en mi UI. Agregaré mi DataAnnotations en mi ViewModel para manejarlo. Puedo escribir algún código de mapeo que mapee los datos de ViewModel a Model and Model to ViewModel donde sea necesario.

+0

por favor, mira la edición en la publicación. – Richard77

+0

@ Richard77: ver mi respuesta actualizada. – Shyju

+0

Ahora tiene sentido en mi cabeza. Gracias – Richard77

1

Según el libro de Julie Lerman en DbContext, que no es necesario ningún anotaciones adicionales a su configuración de la API Fluido. La propiedad Name será validada por Validation API como si hubiera sido configurada con anotaciones de datos.

De acuerdo con el mismo libro, MaxLength y obligatorio son los únicos atributos de validación con conersplicaciones de API fluidas.

+0

por favor, mira la edición en la publicación. – Richard77

4

Si las clases de modelo de entidad se duplican como clases de viewmodel, Y está utilizando el valor predeterminado de la caja DataAnnotationsValidationProvider, entonces necesitaría los atributos de anotaciones de datos en las propiedades del modelo para obtener la validación.

Sin embargo, no debe duplicar las clases de entidades como clases de viewmodel. Tomemos por ejemplo, un controlador que necesita tener una propiedad ReturnUrl en su modelo. No querría esto en su modelo/base de datos de entidad. Debido a diferencias como esta entre el modelo de Vista y el modelo de Entidad, las 2 realmente deberían ser capas separadas (pero cohesivas) en su aplicación. Puede hacerlos cohesivos utilizando una biblioteca como AutoMapper.

Esta es una de las razones por las que prefiero la API con fluidez. Si se apega a la API fluida, nunca pondría ningún atributo en ninguna clase o propiedad de modelo de entidad. Cuando llega el momento de mostrar, insertar o actualizar datos, coloca los atributos solo en las clases de viewmodel.

Además, el atributo [Requerido] en un tipo de entidad realiza la validación durante SaveChanges, mientras que un atributo [Requerido] en un modelo de vista realiza la validación durante el enlace del modelo.

Cuestiones relacionadas