Почему приятельские классы используются для проверки? - PullRequest
5 голосов
/ 24 февраля 2011

Мне любопытно, почему проверка данных выполняется с использованием классов друзей. Рассмотрим следующий пример, где MyEntity является сущностью Linq-to-SQL или Linq-to-Entities, а приведенный ниже класс является частичным классом, расширяющим сущность.

[MetadataType(typeof(MyEntity.MyEntityMetadata))]
public partial class MyEntity
{
    private class MyEntityMetadata
    {
        [Required(ErrorMessage = "The title is required.")]
        public string Title { get; set; }
    }
}

Почему дизайн такой? Когда они разрабатывали DataAnnotations, почему был выбран этот «шаблон друзей»? Почему бы не разместить атрибуты непосредственно в сущности?

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Я предполагаю, что это предотвращает перезапись сгенерированными объектами пользовательских метаданных.

4 голосов
/ 24 февраля 2011

Причина практична - в linq-to-sql и linq-to-entity код, представляющий классы, создается заново при каждом обновлении объектной модели.Чтобы аннотации не перезаписывались, когда это происходит, они должны быть в отдельном классе «собеседника».

Если вы используете аннотации данных в другом контексте - скажем, для модели представления - тогда они могут перейти к самому исходному классу.

...