Я использовал Платформу Объекта с VS2010 для создания простого класса человека со свойствами, firstName, lastName, и электронной почты. Если я хочу присоединить DataAnnotations как то, как сделан в этом сообщении в блоге, у меня есть небольшая проблема, потому что мой класс человека динамично сгенерирован. Я мог отредактировать динамично сгенерированный код непосредственно, но любое время, я должен обновить свою модель весь мой код доступа, вытереть.
Первый инстинкт должен был создать частичный класс и попытку присоединить аннотации, но это жалуется, что я пытаюсь переопределить свойство. Я не уверен, можно ли сделать объявления свойства в 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' */
}
}
Дружественный класс - это более или менее то направление, в котором движется ваш фрагмент кода, за исключением того, что ваш вручную закодированный частичный класс 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 может быть более подходящим.
Вам нужно либо использовать "дружественный" класс метаданных, либо (мое предпочтение) проецировать на модель представления вместо привязки представлений непосредственно к сущностям.