Entity framework Explicit Loading multi-level

entity-framework, explicit

Solution

change

db.Entry(item).Collection(o => o.Channel.Posts).Query().Where(i => i.IsHot && i.IsActive && i.PublishTime <= DateTime.Now).Take(numpost).Load();

to

db.Entry(item.Channel).Collection(o => o.Posts).Query().Where(i => i.IsHot && i.IsActive && i.PublishTime <= DateTime.Now).Take(numpost).Load();

Problem

I tried load multi-level with explicit loading but an error occurred: "The property path 'Channel.Posts' cannot be used for navigation properties. Property paths can only be used to access primitive or complex properties." This is my code: ``` var listSubs; using (var db = new GamePortalContext()) { listSubs = db.Subscribers.Include("Channel").Where(o => o.User.Username == username.ToLower() && o.Channel.IsActive && o.Channel.IsPublic && o.Channel.Posts.Count(p => p.PublishTime <= DateTime.Now && p.IsActive && p.IsHot) > 0); if (listSubs.Any()) { listSubs = listSubs.OrderByDescending(o => o.Channel.ChannelTrack.LastPublishTime); listSubs = (num == int.MinValue) ? listSubs : listSubs.Take(num); foreach (var item in listSubs) { db.Entry(item).Collection(o => o.Channel.Posts).Query().Where(i => i.IsHot && i.IsActive && i.PublishTime <= DateTime.Now).Take(numpost).Load(); } return listSubs.ToList(); } else { return null; } } ``` Here is my post and channel entity public partial class Post { ``` public Post() { this.ReadPostLaters = new HashSet<ReadPostLater>(); } public string PostId { get; set; } public string Name { get; set; } public string Alias { get; set; } public string Description { get; set; } public bool IsActive { get; set; } public bool IsHot { get; set; } public System.DateTime CreatedAt { get; set; } public System.DateTime PublishTime { get; set; } public int Views { get; set; } public bool IsSticked { get; set; } public int UpdatedTime { get; set; } public bool IsSaved { get; set; } public Nullable<int> ChannelId { get; set; } public long UserId { get; set; } public int PostType { get; set; } public string UrlAvatar { get; set; } public virtual Article Article { get; set; } public virtual Channel Channel { get; set; } public virtual Event Event { get; set; } public virtual User User { get; set; } public virtual ICollection<ReadPostLater> ReadPostLaters { get; set; } public virtual Video Video { get; set; } } ``` public partial class Channel { ``` public Channel() { this.Ads = new HashSet<Ad>(); this.ChannelAdmins = new HashSet<ChannelAdmin>(); this.ChannelPlayers = new HashSet<ChannelPlayer>(); this.Notifications = new HashSet<Notification>(); this.Posts = new HashSet<Post>(); this.Subscribers = new HashSet<Subscriber>(); } public int ChannelId { get; set; } public string Name { get; set; } public string Username { get; set; } public int Voters { get; set; } public int Subs { get; set; } public float SiteScore { get; set; } public float UserScore { get; set; } public string HomeUrl { get; set; } public string FanpageUrl { get; set; } public string Publisher { get; set; } public int Players { get; set; } public Nullable<System.DateTime> PublishDate { get; set; } public string Status { get; set; } public bool IsActive { get; set; } public bool IsHot { get; set; } public bool IsPublic { get; set; } public bool IsNew { get; set; } public bool IsChanneling { get; set; } public int CategoryId { get; set; } public string UrlAvatar { get; set; } public string UrlCover { get; set; } public virtual ICollection<Ad> Ads { get; set; } public virtual CategoryChannel CategoryChannel { get; set; } public virtual ICollection<ChannelAdmin> ChannelAdmins { get; set; } public virtual ICollection<ChannelPlayer> ChannelPlayers { get; set; } public virtual ChannelTrack ChannelTrack { get; set; } public virtual ICollection<Notification> Notifications { get; set; } public virtual ICollection<Post> Posts { get; set; } public virtual ICollection<Subscriber> Subscribers { get; set; } } ```

Original source