mvc framework español datos crear conexion con agregar entity-framework asp.net-mvc-4

español - Agregar atributos de validación con un modelo de datos de Entity Framework



crear base de datos entity framework (5)

Aquí hay una variación de las respuestas sugeridas que le permite usar clases en diferentes ensamblajes y espacios de nombres. En realidad, no lo he probado con EF, pero estoy usando esto para las clases de modelos de API codegen de Swagger.

En resumen: herede de la clase de modelo y agregue metadatos en la clase heredada. Un beneficio adicional es que con el codegen de Swagger puede usar el modelo API directamente sin mapeo y para los formularios iniciales puede usar el ctor predeterminado protegido.

[MetadataType(typeof(LocalAssemblyModelMetadata))] public class LocalAssemblyModel : IO.Swagger.Model.OtherAssemblyModel { public LocalAssemblyModel() : base () { } } public sealed class LocalAssemblyModelMetadata { [Required(ErrorMessage = "BaseclassProperty is mandatory.")] public string BaseclassProperty { get; set; } }

Prefacio Febrero de 2015 Si todavía está utilizando Entity Framework EDMX, hágase un favor y realice el pago utilizando Entity Framework Code First en su lugar. La diferencia es que sus tablas se crean a partir de sus clases de modelo, en lugar de en EDMX, donde las clases de modelo se crean con sus tablas. Es una solución más fácil, ¡y el problema en esta pregunta ni siquiera existe!

Primeros pasos con Entity Framework 6 Code First usando MVC 5

Tengo una base de datos SQL existente, y estoy usando ADO.NET Enity Data Model para el modelo. Estoy tratando de construir algunas características CRUD en mi aplicación MVC.

En todos los tutoriales que he encontrado sobre el tema, construyen el modelo desde cero y agregan los atributos a la clase de modelo. Por ejemplo:

[Required] [StringLength(10)] public string Name { get; set; }

Sin embargo, las clases de modelo se generan automáticamente, por lo que creo que cambiarlas es una mala idea (y se escribirán de todos modos si se actualiza el modelo de la base de datos).

¿Cómo agregaría atributos de validación?


Esto ya se ha respondido correctamente, pero también quería añadir que siempre encuentro anidamiento, los metadatos me parecieron un poco más limpios, en mi humilde opinión.

[MetadataType(typeof(ProductDescription.Metadata))] public partial class ProductDescription { sealed class Metadata { [Key] public long id { get; set; } [Display(Name = "Title")] public string title { get; set; } // ... } }

También noté un beneficio adicional de mantener la Metadata privada en la clase. El atributo solo funcionará en la clase correcta, evitando un error que puede ocurrir si duplica la clase (para crear una similar). El error puede ocurrir si olvida cambiar el nombre de clase en el atributo al cambiar el nombre de la clase duplicada.


La respuesta de Mason240 funciona bien, intentaré mejorarla: podría crear una nueva clase ContactDataAnnotations.cs con:

//ContactDataAnnotations.cs - A new file using System.ComponentModel; using System.ComponentModel.DataAnnotations; [MetadataType(typeof(ContactMetadata))] public partial class Contact { // No field here } internal sealed class ContactMetadata { [Required(ErrorMessage = "Name is required.")] [StringLength(5)] public string ContactName {get; set; } }

De esta forma, puede regenerar su clase de contacto a través de EF sin tocar las Anotaciones de datos, y sin previo aviso, dicho sea de paso.


Puede crear una clase parcial, separada de la clase EF generada, para almacenar los metadatos.

//Contact.cs - The original auto-generated file [System.ComponentModel.DataAnnotations.MetadataType(typeof(ContactMetadata))] public partial class Contact { public int ContactID { get; set; } public string ContactName { get; set; } public string ContactCell { get; set; } } //ContactMetadata.cs - New, seperate class using System.ComponentModel; using System.ComponentModel.DataAnnotations; internal sealed class ContactMetadata { [Required(ErrorMessage = "Name is required.")] [StringLength(5)] public string ContactName; }


Sé que esto ha sido marcado como respondido, pero quiero aclarar algunas cosas.

@SteveCav dijo: "Este miembro se define más de una vez". Tuve el mismo error exacto. Pasé horas tratando de descubrir.

Para corregirlo finalmente, debe crear una clase de archivo separada en el mismo ensamblado (creo que esto ya se menciona aquí). Pero lo que quiero enfatizar es que esta clase debe estar anidada con una clase parcial que represente la Clase interna.

Y luego decoras esa clase interna con la clase Anotación. Me gusta esto:

//ContactMap.cs - Present in the same namespace as Contact.cs [System.ComponentModel.DataAnnotations.MetadataType(typeof(ContactMap))] partial class Contact // Present in the ContactMap class. This represent the Inner Class { } //ContactMap.cs - This represent the outer class using System.ComponentModel; using System.ComponentModel.DataAnnotations; public class ContactMetadata { [Required(ErrorMessage = "Name is required.")] [StringLength(5)] public string ContactName; }

Espero que esto sea más claro o más comprensible.