Лучшее решение для исключения круговой ссылки EF 4.1 + MVC + JSON? - PullRequest
4 голосов
/ 08 июля 2011

Я использую EF 4.1 Database First, с шаблоном T4, генерирующим мои классы POCO в отдельной сборке. У меня есть репозитории для извлечения данных и сервисный уровень, который используется для связи с пользовательским интерфейсом.

Я пытался сделать каскадные выпадающие списки. Я новичок в MVC и EF 4.1, поэтому я искал stackoverflow для возможных решений.

Это пример класса представления модели:

public class MyViewModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}

То, что я прочитал до сих пор, решения:

  1. Использовать ScriptIgnoreAttribute в System.Web.Script.Serialization вкл ссылки на свойства - я не очень хочу сделать это, потому что я не хочу добавлять ссылку на System.Web в моем проекте POCO

  2. Отключить отложенную загрузку в EF 4.1 DbContext - я не уверен, хочу ли я использовать Включить подробный мой проект

  3. Возвращать анонимные типы - у меня будут проблемы с этим подходом, когда мой проект станет большим?

  4. Используйте ViewModel - предположим, у меня есть Клиент, который может иметь 1 или более телефонов. В первом выпадающем списке вы можете выбрать «Клиент», а во втором - все его телефоны.
    Но не вызовет ли это круговое исключение для моего объекта Phones? Или я бы сделал специальный класс для моего объекта Phone? Это похоже на много ненужного кода.

  5. Использовать AutoMapper - не иметь опыта работы с AutoMapper, поэтому я не знаю, насколько это сложно.

За кого бы вы проголосовали и почему?

1 Ответ

5 голосов
/ 08 июля 2011

Используйте модель представления и AutoMapper для сопоставления между вашими моделями домена и моделью представления, которую вы будете отправлять в представление.Таким образом, вы получаете полный контроль над тем, какие свойства отправляются в представление, что, как следствие, уменьшает объем данных, передаваемых между сервером и клиентом.Кроме того, поскольку теперь вы используете модели представления, ваш код более устойчив к изменениям в ваших доменных объектах.Если вы измените их, это повлияет только на слой отображения, и, таким образом, вам больше не нужно будет прикасаться к контроллерам или представлениям.

Поэтому я советую скачать AutoMapper, прочитать документацию и начать ее использовать.Поверьте, это изменит жизнь.

...