Подтвердить что ты не робот

Как добавить проверку на мои классы POCO (шаблон)

Поэтому я использовал этот учебник для создания моих классов poco, которые я должен использовать во всех своих приложениях. Проблема в том, что Im не должен изменить сгенерированные файлы cs, потому что они автоматически генерируются... Как добавить атрибуты, такие как [Обязательно] и прочее подобное? пожалуйста, помогите

4b9b3361

Ответ 1

Вы не можете добавить его напрямую (если вы не измените шаблон T4, чтобы создать их для себя), но вы можете попробовать использовать трюк, представленный в динамических данных ASP.NET. Все классы POCO определяются как частичные. Поэтому давайте определим вашу частичную часть:

using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
  private class MyClassMetadata
  {
     [Required]
     public object Id;

     [Required]
     [StringLength(100)]
     public object Name;
  }
}

Класс метаданных - это специальный тип для хранения только метаданных - он никогда не используется. Имя полей должно быть таким же, как соответствующие поля в реальном классе (типы полей не имеют значения, поэтому вы можете использовать object).

В любом случае в ASP.NET MVC вы должны использовать специализированную модель просмотра для каждого представления и передавать необходимые данные, чтобы атрибуты проверки были помещены в класс модели вида.

Ответ 2

Атрибуты сгенерированных POCO получены из граней объектов в модели. например для [Required] убедитесь, что поле "не равно нулю", а для [StringLength(n)] убедитесь, что тип данных nvarchar(n) через грань MaxLength.

Ответ 3

Дальнейшее расширение ответа. Используя блок валидации Microsoft Patterns and Practices Enterprise Library 5, вы можете открыть множество возможностей проверки, помимо доступных через обычные аннотации данных.

using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

[HasSelfValidation]
public partial class Category : ICategory
{
    [SelfValidation]
    public void Validate(ValidationResults validationResults)
    {
        if (this.Title === "Credo")
        {
            validationResults.AddResult(
                new ValidationResult(
                    "Category title cannot be a veiled reference to a former cool 2000AD character.",
                    this,
                    null,
                    null,
                    null));
        }

        validationResults.AddAllResults(
            ValidationFactory
            .CreateValidator<ICategory>()
            .Validate(this));
    }
}

using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

public interface ICategory
{
    int Id
    {
        get; 
        set;
    }

    [Required]
    [StringLengthValidator(1, 50, MessageTemplate = "Category title should be a maximum of 50 characters in length.")]
    string Title
    {
        get; 
        set;
    }
}