Pregunta

Estoy utilizando anotaciones de datos para comprobar los datos que está siendo introducido, pero estoy atascado cuando se trata de forma más personalizada para validar los datos.

necesito para ejecutar consultas en la base de datos para ver si las cosas existe allí o no, y luego informar al usuario si aparece un "error db-comprobación personalizada", tales como "El Nombre de la empresa ya existe"

¿Cómo puedo poner en práctica tal cosa junto con DataAnnotations?

he hecho todas las consultas, etc. utilizando LINQ y Entity Framework que viene con 3.5sp1

/ M

¿Fue útil?

Solución

atributos

personalizados que se extienden anotaciones de datos

Usted tendrá que escribir sus propios atributos que va a hacer la validación de su instancia de objeto contra el almacén de datos.

Asegúrese de que sus clases heredan la clase System.ComponentModel.DataAnnotations.ValidationAttribute:

public class MustNotExist: ValidationAttribute
{
    ...
}

Precaución

Me he encontrado con una situación similar cuando necesitaba para validar que el objeto es único dentro de almacén de datos. Pero este tipo de validación no era posible en la misma clase de entidad, ya que sólo debe funcionar para aquellas entidades que se están creando, pero no cuando regrese a su entidad del almacén de datos ya.

Mi solución era tener una interfaz independiente, clase y atributo.

public interface IExternalValidator ...

class DBUniqueValidator: IExternalValidator ...

class ValidateExternallyAttribute: FilterAttribute, IActionFilter
{
    ...
    public ValidateExternallyAttribute(Type validatorType, Type entityType) ...
    ...
}

pude poner mi atributo en las acciones del controlador que recibe parámetros de la entidad. atributo de acción de filtro a continuación, comprueba los parámetros de acción del controlador (se puede acceder fácilmente a sus tipos y valores) y se ejecuta validador externo contra parámetros correctos (tipos proporcionados en la definición de atributo) y rellena errores ModelState cuando falla la validación.

[ValidateExternally(typeof(DBUniqueValidator), typeof(User))]
public ActionResult RegisterUser(User newUser)
{
    if (!this.ModelState.IsValid)
    {
        // act accordingly - probably return some error depending on model state errors
    }
    // register new user in data store
}

De esta manera pude ejecutar la validación externa sólo en aquellas medidas que realmente lo necesitaban, y esta técnica también ayudaron a mi controlador de código de acciones para mantenerse limpias y cortas. Todo lo que tenía que hacer es comprobar si hay errores de estado del modelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top