ASP.NET MVC POCO классы и проверка - PullRequest
1 голос
/ 06 января 2011

У меня есть три проекта / библиотеки.

SiteService (WCF Service)SiteModel (объекты POCO)SiteMVC (веб-приложение)

В моей библиотеке SiteModel у меня есть только объекты POCO.Эти объекты генерируются шаблоном t4, поэтому я предпочитаю ничего не менять.SiteService использует эти объекты POCO и сериализует их (что является причиной использования объектов POCO вместо сгенерированных классов из конструктора EF)

В WebApplication я хочу использовать проверку этих объектов POCO.Я хочу сохранить свою библиотеку моделей как можно более чистой и не использовать на них аннотации данных, поскольку правила могут различаться в разных приложениях.

Каков наилучший способ проверки в ASP.NET MVC2?Можно ли использовать DataAnnotations (класс приятеля)?

Ответы [ 2 ]

3 голосов
/ 06 января 2011

Если ваш шаблон T4 генерирует частичные классы, то вам повезло.

Вы можете создать отдельное частичное определение и украсить его с помощью MetadataType:

// T4 Generated Code
public partial class Item
{
    public int Id { get; set; }
    public string Name { get; set; }        
}

// Your partial in a separate file
[MetadataType(typeof(ItemValidation))]
public partial class Item
{
}

// Any DataAnnotations go here
public partial class ItemValidation
{
    [Required(ErrorMessage = "You need to have a Name!")]
    public string Name { get; set; }
}

В противном случае,ваш единственный вариант - создать ViewModels с DataAnnotations в веб-проекте, а затем сопоставить ваши Модели (чистые объекты POCO) и ваши ViewModels.

0 голосов
/ 19 марта 2011

FYI. Пока частичный класс работает. Если вы используете RIA или WCF и хотите, чтобы свойство отображалось, вам нужно добавить атрибут [DataMember].

public partial class Employee
{       
    [DataMember]
    public string ComposedName
    {
        get
        {
            return String.Format("{0}, {1}", this.LastName, this.FirstName);
        }
        set
        { throw new NotImplementedException(); }
    }
}
...