Linq to SQL через усердную сериализацию - PullRequest
2 голосов
/ 18 февраля 2011

Я занимаюсь разработкой API с использованием .NET MVC и возвращаю результаты в формате JSON.Сначала казалось, что все в порядке с моими результатами, возвращенными из базы данных как IEnumerable, которые затем преобразуются в возвращаемый тип JSONResult.

Это сериализует иерархию для меня, и дочерние объекты загружаются автоматически на основе отношений вдизайнер и стать частью JSON иерархии.

IEnumerable<Book> books= _contentRepository.GetBooks();

return Json(new {
                   success = true,
                   data = new {
                                 books = books
                              }
                }, JsonRequestBehavior.AllowGet);

Эта проблема также является проблемой, поскольку иногда загружается целая нагрузка дочерних объектов, которая мне не нужна.Например, скажем, у меня есть книжная сущность, у которой есть связанные книги, и у этих связанных книг также есть связанные книги, дерево очень быстро углубляется.

Рик Страл говорит об этом ближе к концу своей статьи:http://www.west -wind.com / weblog / posts / 147218.aspx

Я все еще хочу сохранить иерархию, так что json также является иерархическим.например, book.author, book.publisher [0] .name, но мне нужен некоторый контроль над тем, что загружено в запросе.

Я смотрю на удаление всех ссылок между сущностями в конструкторе и указание соединений взапрос или запросы и, возможно, вручную составляют результирующую иерархию?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Я бы использовал модель представления: класс, который специально приспособлен для удовлетворения требований представления (или, в вашем случае, структуры JSON). Затем выполните действие контроллера map между моделью, выбранной из базы данных, и моделью представления. Теперь у вас есть полный контроль.

IEnumerable<Book> books = _contentRepository.GetBooks();
IEnumerable<BookViewModel> bookViewModels = Mapper.Map<IEnumerable<Book>, IEnumerable<BookViewModel>>(books);
return Json(
    new { success = true, data = bookViewModels }, 
    JsonRequestBehavior.AllowGet
);
0 голосов
/ 19 февраля 2011

Как вы автоматически загружаете связанные объекты? Обычно эти коллекции являются отложенными экземплярами EntitySet, которые не загружаются, если они не перечислены. Вы уверены, что у вас есть проблема, которую вы пытаетесь решить?

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