2

Я разделить свой проект в (на данный момент) 4-х слоев:Repository модели и отложенной загрузки + AutoMapper

  • Application (проект ASP.NET MVC)
  • домена/Модель (содержит только модели без какой-либо логики в них у всех)
  • BusinessLogic (сейчас только "оборачивает" хранилища)
  • ВВЛ (Entity Framework, но должна быть взаимозаменяемым)

Контроллеры MVC используют «сервисы» бизнес-логики, чтобы разговаривать с базой данных через все, что лежит под уровнем бизнес-логики, и диспетчеру не нужно никому говорить, что «я хочу это Student, а также хочу, чтобы все его Courses» - это означает, что следует использовать ленивую загрузку.

Дело в том, что если я просто «позвоню» и верну результат тому, кто вызывает действие контроллера, я не могу контролировать то, что загружается, если я явно не получаю доступ к свойствам модели, чтобы вызвать загрузку граф.

Я хотел бы использовать AutoMapper для сопоставления с моей модели на Dto (по одной для каждой модели, которая определяет, что возвращается).

Скажет, у меня есть модель, как это:

public class Student 
{ 
    public string Name {get;set;} 
    public int Age {get;set;} 
    public ICollection<Course> Courses {get;set;} 
} 

И в DTO как это:

public class StudentDto 
{ 
    public string Name {get;set;} 
    public ICollection<Course> Courses {get;set;} 
} 

Когда AutoMapper делает отображение, то doesen't появляется на карту Courses, которая моя проблема.

Должен ли я загружаться на уровне хранилища вместо этого?

ответ

2

Как у вас в Student и StudentDto Automapper необходимо правильно отобразить граф объектов в dto. Это будет работать только в том случае, если возможна ленивая загрузка, иначе вам может потребоваться интенсивная загрузка.

Я думаю, что лучший способ выбрать, какой метод использовать, - проверить эффективность обоих методов, которые будут зависеть от нескольких факторов, таких как ваша модель данных в db и задержки между сервером sql и вашим приложением и т. Д.
Редактировать .. Как выбрать лучший метод
Как выбрать лучший метод Вы должны рассмотреть три вещи,

  1. Сколько соединений, которые вы собираетесь сделать с базой данных. Если вы используете ленивую загрузку, будет вызван запрос базы данных для всех опорных точек свойств навигации, если упомянутое свойство навигации не входит в контекст.

  2. Сколько данных, которые вы собираетесь извлечь из базы данных Если вы захотите загрузить все данные в исходном запросе с различной загрузкой, это будет слишком медленно, когда у вас будет огромное количество данных для извлечения.

  3. Сложность запроса. Когда вы используете ленивую загрузку, запросы будут простыми, потому что все данные не загружаются в исходный запрос.Если вы используете немедленную нагрузку он будет делать п.л. будет более сложным с путями запроса

читать далее here

+0

Мы хостинг нашего приложения + дб с Windows Azure, БД SQL Azure - это было бы лучше к нетерпеливой нагрузке? – Jeff

+0

Хм .. У меня нет точного ответа. Я думаю, что лучший способ - это некоторое тестирование производительности. Если вы находитесь в начале разработки, может быть, это не проблема слишком сильно. вы можете решить это позже с некоторыми более сложными запросами и разностными сценариями с некоторой реальной бизнес-логикой. Потому что у вас всегда есть и два варианта позже. –

+0

Aaah - Я вижу, я считаю, что лучший способ для нас состоит в том, чтобы запускать триггерную загрузку AutoMapper, поскольку мы можем определить Dto для каждого сценария - это предотвратит большие результаты. Вы делаете хорошие очки. – Jeff

Смежные вопросы