2011-07-21 44 views
9

Quiero usar MVC 3 y Entity Framework para mi aplicación.MVC3 Validación con Entity Framework Modelo/Base de datos First

El modelo se almacenará en un ensamblaje diferente de la aplicación MVC.

La elección que estoy haciendo es utilizar el EF para generar mis entidades o utilizar primero el código.

Con el código primero, puedo decorar miembros con [Obligatorio] etc. ... Pero, ¿cómo podría agregar esos atributos si EF ha generado entidades de la base de datos?

Tener EF generar mis entidades ahorrará mucho tiempo, pero quiero que MVC llene automáticamente la validación dependiendo de cómo haya decorado mis miembros. ¿Esto tiene sentido? Si es así, ¿cómo lo haría?

Respuesta

11

En ese caso, se usa MetadataTypeAttribute. Puede combinarlo con clases parciales para lograr los resultados deseados

Y por cierto, en su lugar investigaría más al decidir entre utilizar los diseños de Database First y Code First. No todo se trata de ahorrar tiempo al generar entidades, hay mucha más diferencia entre esos dos enfoques. Para el propósito de ahorrar tiempo, puede usar EF Power Tools para generar primeras entidades de código desde la base de datos: simple.

+0

Gracias, Cuando hago eso obtengo un error de nombre ambiguo. Esto es lo que tengo en mi clase parcial (la entidad se llama ítem en el modelo): – Paul

+0

[MetadataType (typeof (Item))] public partial class Artículo { [StringLength (10), obligatorio] public string MaterialName { get; conjunto; } } – Paul

+0

paul, la ambigüedad "podría" tener que ver con el archivo edmx ef preexistente tal vez? –

2

Mejor que auto generar sus entidades, recomiendo que uses Código primera o la cartografía de una base de datos existente para las clases de POCO (no generar las entidades, apenas crear a mano y mapear a la base de datos existente)

ScottGu escribió sobre using EF "Code First" with an existing database.

1

mira esto: En su plantilla modelo (archivo con extensión model.tt) se puede hackear esta plantilla para generar decoradores, en este ejemplo añado el [Obligatorio] decorador además un mensaje de error

var simpleProperties = typeMapper.GetSimpleProperties(entity); 
if (simpleProperties.Any()) 
{ 
    foreach (var edmProperty in simpleProperties) 
    { 
     if(!edmProperty.Nullable) 
     {#> 
[Required(ErrorMessage="<#=String.Format("The field {0} is required",edmProperty.ToString())#>")]<# 
     }#> 
<#=codeStringGenerator.Property(edmProperty)#><# 
    } 
} 

Así, el resultado es algo como esto

[Required(ErrorMessage="The field Id is required")] 
    public long Id { get; set; } 

PS: también puede añadir el using System.ComponentModel.DataAnnotations; editando la plantilla.

Espero que esto te ayude.

Cuestiones relacionadas