Нет, у вас нет возможности выдать ошибку компиляции в этом контексте.Данные в любом случае загружаются во время выполнения.
LazyLoading Предполагается, что вы отображаете блоги, сообщения, комментарии в поле зрения, поэтому вам нужно загрузить все, когда страница загружается.Когда вы включаете lazyload
и свойства карты, которые не были включены в запрос уровня данных, он будет загружать связанные сущности
public BlogViewModel(BlogDbModel blogDbModel)
{
Name = blogDbModel.Name;
Posts = blogDbModel.Posts;
}
Если вы включите lazyload и сделаете это сообщение будет получено с использованием функции lazyload.Что если сообщение содержит ссылку на User
или любой другой объект, то оно тоже будет загружено.Когда вам все нужно на первом месте, не рекомендуется использовать lazyload, потому что это приведет к дополнительному обращению к базе данных.
IQueryable из репозитория
Я бы сказал, IQueryable дляviewmodel - это дырявая абстракция.В идеале ваш уровень данных должен выполнять это.Предоставление IQuerable<BlogDbModel>
для Viewmodel похоже на то, как разработчик может выбрать 1Blogs => Post => User => Accounts1, что-нибудь связанное с этим.
ИМХО Я бы написал методы уровня данных, необходимые для представления.
LazyloadingEnabled = false;
public IEnumerable<BlogDbModel> GetBlogs()
{
return _dbContext.Blogs.ToList();
}
public IEnumerable<BlogDbModel> GetBlogsAndPosts()
{
return _dbContext.Blogs.Include("Posts").ToList();
}
//This will fetch only what is needed (You can customize to get columns what is needed)
public IEnumerable<NewCustomDTO> GetBlogsAndPostCount()
{
return _dbContext.Blogs.Select(x=> NewCustomDTO
{
BlogName = x.BlogName,
Count = x.Posts.Count(),
});
}