1

Я получаю запись из базы данных с сущностью. он имеет вложенную навигационную собственность.Как ограничить свойство вложенной навигации в Asp.net mvc Контроллер

public partial class Comment 
{ 
    public Comment() 
    { 
     this.Comments1 = new HashSet<Comment>(); 
    } 

    public int CommentId { get; set; } 
    public Nullable<int> ParentId { get; set; } 
    public string Title { get; set; } 

    public virtual ICollection<Comment> Comments1 { get; set; } 
    public virtual Comment Comment1 { get; set; } 
} 

Связь между идентификатором и родительским удостоверением личности. и моя навигация - это комментарии1. Теперь я выбираю запись с 5 вложенными навигациями. Я хочу ограничение Только 3 Вложенная навигация в моем контроллере С кодом C#. Как создать рекурсивный метод и ограничить вложенную навигацию до 3 уровня?

ответ

1

К сожалению, этой функции не существует в EF. Что вы можете сделать, это отключить отложенной загрузки:

public class YourContext : DbContext 
{ 
    public YourContext() 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
    } 
} 

И затем использовать Include метод расширения как часть вашего запроса, чтобы загрузить уровни, которые вам нужны:

var query=context.Comments.Include(c=>Comments1.Select(c1=>c1.Comments1))...; 

Я думаю, что другое решение может использовать Automapper, если мой ум не подведет меня, я думаю, вы можете использовать метод MaxDepth в свойствах самостоятельной ссылки, чтобы указать, сколько уровней вы хотите загрузить:

configuration.CreateMap<Comment, CommentViewModel>() 
       .ForMember(dest => dest.Comments, opt => opt.MapFrom(src => src.Comments1).MaxDepth(3)...; 
Смежные вопросы