Código primero: ¿la API fluida influye en la interfaz de usuario?

Estoy leyendo un libro escrito por Julie Lerman sobre Code First. Según el libro, las anotaciones y la API fluida dan el mismo resultado. Todo depende del estilo del desarrollador.

Sé que las anotaciones permiten configurar cómo el código genera primero los objetos de la base de datos y cómo MVC personaliza los elementos de la interfaz de usuario. Digamos que uso [Obligatorio, MaxLength(50)]. El atributo generará 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é pasa si decido usar Fluent API para configurar Code primero? ¿Seguiré necesitando anotaciones para influir en los elementos de la interfaz de usuario o usar una API fluida será suficiente?

EDITAR

¿Qué hay de las anotaciones, como Display, que sirven solo para fines de interfaz de usuario? ¿Tienen equivalentes? Si no, ¿tendré que usar anotaciones?

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

Gracias por ayudar

preguntado el 22 de mayo de 12 a las 21:05

3 Respuestas

La anotación de datos es la forma más sencilla de decirle a una clase que aplique alguna regla de validación. También puede hacer lo mismo con Fluent API. A algunas personas les gusta hacerlo mediante anotaciones de datos y a otras les gusta hacerlo con una API fluida.

Razones para que te guste con anotaciones de datos

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

Razones para gustar con Fluent API

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

No puede hacer todas las cosas de Fluent API con la forma de anotaciones de datos. De la misma manera, no tiene pocos atributos de anotaciones de datos equivalentes que no estén presentes con la forma Fluent API (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 de Fluent. La función principal de Fluent API es analizar la configuración fluida que escribimos y actuamos al crear el modelo (base de datos) de las entidades. Recuerde que estamos anulando el OnModelCreating método para escribir nuestra configuración API fluida. Entonces, para la validación de la interfaz de usuario (de mi modelo de vista), usaría la forma de anotación de datos y usaría una API fluida si quiero definir algo relacionado con mi modelo de datos, como definir una clave externa o asignar esta entidad a una tabla con un nombre diferente, etc.

EDIT: Según la edición de la pregunta,

Debe hacer uso de las anotaciones de datos en este caso. Si estás haciendo código primero. Puede recordar que esa entidad será su tabla de base de datos (por supuesto, puede decirle a EF que ignore / cambie el nombre de columnas específicas). En ese caso, mantendría mi Entities limpiar y crear un ViewModel que usaré en mi interfaz de usuario. añadiré mi DataAnnotations en mi ViewModel para manejarlo Puedo escribir algún código de mapeo que mapee datos de ViewModel a Model y Model a ViewModel donde sea necesario.

contestado el 22 de mayo de 12 a las 22:05

Ahora tiene sentido en mi cabeza. Gracias - Richard77

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

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

Esta es una de las razones por las que prefiero la API fluida. Si se apega a la API fluida, nunca colocará ningún atributo en ninguna clase o propiedad del modelo de entidad. Cuando llega el momento de mostrar, insertar o actualizar datos, coloque los atributos solo en las clases del modelo de vista.

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.

contestado el 22 de mayo de 12 a las 22:05

De acuerdo con el libro de Julie Lerman sobre DbContext, NO necesita ninguna anotación adicional para la configuración de la API de Fluent. La API de validación validará la propiedad Nombre como si se hubiera configurado con anotaciones de datos.

De acuerdo con el mismo libro, MaxLength y Required son los únicos atributos de validación con equivalentes de API fluidos.

contestado el 22 de mayo de 12 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.