c# - mvc - entity framework ventajas y desventajas
Anotaciones de datos con Entity Framework 5.0(base de datos primero) (4)
¿Cuál es la mejor manera de usar las anotaciones de datos para la validación si estoy usando el primer enfoque de la base de datos Entity Framework (v5.0)?
Esta es mi clase parcial creada por Entity Framework:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace ACore
{
using System;
using System.Collections.Generic;
public partial class PayrollMarkup_State
{
[UIHint("StatesEditor")] // <-- I added this line but it will be overwritten
public string State { get; set; }
public Nullable<float> MaintenancePercentage { get; set; }
public Nullable<float> OfficePercentage { get; set; }
}
}
Intenté esto sin éxito ...
Archivo generado por Entity Framework: ''PayrollMarkup_State.cs''
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace ACore
{
using System;
using System.Collections.Generic;
public partial class PayrollMarkup_State
{
public string State { get; set; }
public Nullable<float> MaintenancePercentage { get; set; }
public Nullable<float> OfficePercentage { get; set; }
}
}
Luego creé este archivo en un directorio diferente: ''PayrollMarkup_state.cs''
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace ACore.Models
{
[MetadataType(typeof(PayrollMarkupMetadata))]
public partial class PayrollMarkup_State
{
}
public class PayrollMarkupMetadata
{
[UIHint("StatesEditor")]
public string State; // Has to have the same type and name as your model
}
}
Aunque es algo doloroso, necesita crear una clase para usar como MetadataType
para su clase modelo.
[MetadataType(typeof(PayrollMarkupMetadata))
public partial class PayrollMarkup_State
{
...
}
public class PayrollMarkupMetadata
{
[UIHint("StatesEditor")]
public string State; // Has to have the same type and name as your model
// etc.
}
Puedes usar una clase parcial de metadatos
http://www.asp.net/mvc/overview/getting-started/database-first-development/enhancing-data-validation
Tiene un problema de espacio de nombres: ha definido dos clases diferentes de PayrollMarkup_State, una debajo del espacio de nombres ACore y otra debajo del espacio de nombres ACore.Models. Cambie el espacio de nombres a ACore (desde ACore.Models) en el archivo que contiene la definición del tipo de metadatos.
Usé dos clases adicionales: Mapa y Meta, aquí está mi mapa:
namespace Whatever.Models
{
[MetadataType(typeof(ThisMeta))]
public partial class This
{
}
}
ahora aqui esta la meta clase
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Whatever.Models
{
public class ThisMeta
{
[DisplayName("")]
public int UID { get; set; }
}
}