Я разделить свой проект в (на данный момент) 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
, которая моя проблема.
Должен ли я загружаться на уровне хранилища вместо этого?
Мы хостинг нашего приложения + дб с Windows Azure, БД SQL Azure - это было бы лучше к нетерпеливой нагрузке? – Jeff
Хм .. У меня нет точного ответа. Я думаю, что лучший способ - это некоторое тестирование производительности. Если вы находитесь в начале разработки, может быть, это не проблема слишком сильно. вы можете решить это позже с некоторыми более сложными запросами и разностными сценариями с некоторой реальной бизнес-логикой. Потому что у вас всегда есть и два варианта позже. –
Aaah - Я вижу, я считаю, что лучший способ для нас состоит в том, чтобы запускать триггерную загрузку AutoMapper, поскольку мы можем определить Dto для каждого сценария - это предотвратит большие результаты. Вы делаете хорошие очки. – Jeff