Использование DataAnnotations с Entity Framework - PullRequest
10 голосов
/ 08 июня 2010

Я использовал Entity Framework с VS2010 для создания простого класса person со свойствами firstName, lastName и email. Если я хочу прикрепить DataAnnotations, как это сделано в этом сообщении в блоге , у меня небольшая проблема, потому что мой класс person создается динамически. Я мог бы редактировать динамически сгенерированный код напрямую, но всякий раз, когда мне приходилось обновлять мою модель, весь мой код проверки мог быть уничтожен.

Первый инстинкт был создать частичный класс и попытаться прикрепить аннотации, но он жалуется, что я пытаюсь переопределить свойство. Я не уверен, что вы можете делать объявления свойств в C # как объявления функций в C ++. Если бы вы могли, это может быть ответом. Вот фрагмент того, что я пробовал:

namespace PersonWeb.Models
{
  public partial class Person
  {
    [RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")]
    public string Email { get; set; } 
    /* ERROR: The type 'Person' already contains a definition for 'Email' */
  }
}

Ответы [ 2 ]

24 голосов
/ 09 июня 2010

Класс приятеля - это более или менее направление, в котором идет ваш фрагмент кода, за исключением того, что у вашего частично закодированного вручную класса Person будет внутренний класс, например:

[MetadataType(typeof(Person.Metadata))]
public partial class Person {
    private sealed class MetaData {
        [RegularExpression(...)]
        public string Email { get; set; }
    }
}

Или вы можете иметь свой частичный класс Person и отдельный Meta-класс, например:

[MetadataType(typeof(PersonMetaData))]
public partial class Person { }

public class PersonMetaData {
[RegularExpression(...)]
public string Email;
}

Это обходные пути, и более подходящим может быть отображенный класс Presentation.

3 голосов
/ 08 июня 2010

Вам нужно либо использовать класс метаданных "приятель", либо (мое предпочтение) проецировать на модель представления вместо привязки представлений непосредственно к сущностям .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...