Использование классов EF POCO в качестве моделей MVC 2 (с аннотациями данных) - PullRequest
3 голосов
/ 04 июня 2010

У меня есть четырехслойное веб-приложение, запрограммированное на C # ... .Net 4.0:

  • UI Layer
  • Бизнес-уровень
  • Уровень доступа к данным
  • Слой сущностей

Мой слой данных содержит edmx Мой слой сущностей содержит мои объекты POCO (созданные сценарием t4), и на этот слой ссылаются все остальные слои.

При создании формы MVC, например, для создания нового клиента. У меня уже есть класс клиента с полями для имени, фамилии и т. Д. В слое сущностей, но этот автоматически сгенерированный класс POCO не есть аннотации данных для проверки ... IE [Обязательно] и т. Д. При отправке формы

Мое решение сейчас состоит в том, чтобы создать новые классы моделей, которые почти идентичны моим классам poco, но также имеют эти дополнительные аннотации проверки.

Я хочу знать, есть ли простой способ использовать определенные объекты POCO в модели MVC (на уровне пользовательского интерфейса) без необходимости почти переписывать класс ... а также без изменения t4, который генерирует эти классы POCO (поскольку я не до скорости на t4).

Я видел это из другого поста на stackoverflow http://automapper.codeplex.com/ ... не уверен, будет ли это делать или это лучшее решение.

Ответы [ 2 ]

6 голосов
/ 04 июня 2010

Если ваш класс POCO объявлен как таковой:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}

затем, если вы просто измените T4, чтобы сделать его частичным классом, вы можете определить его в отдельном файле:

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

    internal class PersonMetadata {

        [Required]
        // insert other metadata here
        public string FirstName { get; set; }

        // and if you don't want metadata for lastname, you can leave it out
    }
}

Два дополнительных пункта - класс метаданных не должен быть вложенным в определяемую вами часть, хотя я думаю, что он точнее. Кроме того, типы не должны совпадать в классе метаданных, так что вы можете сделать их объектными объектами, если хотите (и вы можете увидеть некоторые примеры в Интернете с этим, например)

4 голосов
/ 04 июня 2010

Изменение шаблона T4 совсем не сложно. Недавно я столкнулся с той же проблемой и решил немного почитать о T4, а затем изменить шаблон, чтобы создать сгенерированные свойства так, как они мне нужны (аннотации, в моем случае NotifyPropertyChange и т. Д., Так как я использую те же объекты POCO в Интерфейс MVC и интерфейс Silverlight).

Даже если вы ищете решение, которое не требует модификации T4, я надеюсь, что это полезно.

...