Как добавить проверку в мои классы POCO(шаблон)
Поэтому я использовал этот учебник для генерации своих классов poco, которые я буду использовать на протяжении всей моей заявки... проблема в том, что я не должен изменять сгенерированные cs-файлы, потому что они автоматически регенерируются... Как мне добавить такие атрибуты, как [Required] и вроде того?? пожалуйста помоги
3 ответа
Вы не можете добавить его напрямую (если не измените шаблон 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 следует использовать специализированную модель представления для каждого представления и передавать необходимые данные, чтобы атрибуты проверки были помещены в класс модели представления.
Далее уточняю ответ. С помощью блока валидации Microsoft Patterns & 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;
}
}
Атрибуты сгенерированных POCO получены из аспектов на объектах в модели. например для [Required]
убедитесь, что поле "не равно нулю" и для [StringLength(n)]
убедитесь, что тип данных nvarchar(n)
через MaxLength
фаска.