با سلام
بنده مدل زیر را دارم که مربوط به صفحاتی هستند که والد هم دارند.
و با دستور زیر میخواهم از آن کوئری بگیرم:
دستور فوق به خوبی کار میکنه. ولی وقتی با که دستوراتی که توسط mini-profiler لاگ شده را میبینیم که اخطار duplicate reader را میدهد.
برای هر page موجود دستور زیر را صادر میکند
میخواستم ببینم کاری میشه کرد تا سربار این کوئری را کمتر کرد؟
در ضمن اگر بخواهم viewmodel را طوری تعریف کنم تا فیلدهای اضافی مانند createddate و user و... که در هنگام نمایش منوی آبشاری به آنها نیازی ندارم چه کار باید کرد؟ چون من هر کاری کردم نتونستم parent را برای viewmodel به خوبی تعریف کنم.
ممنون
بنده مدل زیر را دارم که مربوط به صفحاتی هستند که والد هم دارند.
public class Page { public virtual int Id { get; set; } public virtual string Title { get; set; } public virtual DateTime? CreatedDate { get; set; } public virtual DateTime? ModifiedDate { get; set; } public virtual string Body { get; set; } public virtual string Keyword { get; set; } public virtual string Description { get; set; } public virtual string Status { get; set; } public virtual bool? CommentStatus { get; set; } public virtual int? Order { get; set; } public virtual User User { get; set; } public virtual User EditedByUser { get; set; } public virtual ICollection<Comment> Comments { get; set; } public virtual int? ParentId { get; set; } public virtual Page Parent { get; set; } public virtual ICollection<Page> Children { get; set; } }
و با دستور زیر میخواهم از آن کوئری بگیرم:
this._pages.ToList().Where(page => page.Parent == null).ToList();
دستور فوق به خوبی کار میکنه. ولی وقتی با که دستوراتی که توسط mini-profiler لاگ شده را میبینیم که اخطار duplicate reader را میدهد.
برای هر page موجود دستور زیر را صادر میکند
SELECT [Extent1].[Id] AS [Id], [Extent1].[Title] AS [Title], [Extent1].[CreatedDate] AS [CreatedDate], [Extent1].[ModifiedDate] AS [ModifiedDate], [Extent1].[Body] AS [Body], [Extent1].[Keyword] AS [Keyword], [Extent1].[Description] AS [Description], [Extent1].[Status] AS [Status], [Extent1].[CommentStatus] AS [CommentStatus], [Extent1].[Order] AS [Order], [Extent1].[ParentId] AS [ParentId], [Extent2].[Id] AS [Id1], [Extent2].[Title] AS [Title1], [Extent2].[CreatedDate] AS [CreatedDate1], [Extent2].[ModifiedDate] AS [ModifiedDate1], [Extent2].[Body] AS [Body1], [Extent2].[Keyword] AS [Keyword1], [Extent2].[Description] AS [Description1], [Extent2].[Status] AS [Status1], [Extent2].[CommentStatus] AS [CommentStatus1], [Extent2].[Order] AS [Order1], [Extent2].[ParentId] AS [ParentId1], [Extent2].[User_Id] AS [User_Id], [Extent2].[EditedByUser_Id] AS [EditedByUser_Id], [Extent1].[User_Id] AS [User_Id1], [Extent1].[EditedByUser_Id] AS [EditedByUser_Id1] FROM [dbo].[Pages] AS [Extent1] LEFT OUTER JOIN [dbo].[Pages] AS [Extent2] ON [Extent1].[ParentId] = [Extent2].[Id
میخواستم ببینم کاری میشه کرد تا سربار این کوئری را کمتر کرد؟
در ضمن اگر بخواهم viewmodel را طوری تعریف کنم تا فیلدهای اضافی مانند createddate و user و... که در هنگام نمایش منوی آبشاری به آنها نیازی ندارم چه کار باید کرد؟ چون من هر کاری کردم نتونستم parent را برای viewmodel به خوبی تعریف کنم.
ممنون