У меня есть класс POCO Menu со свойством дочерних ссылок:
public class Menu
{
public int MenuID { get; set; }
public int? ParentID { get; set; }
public string Title { get; set; }
...
public virtual Menu Parent { get; set; }
public virtual ICollection<Menu> Children { get; set; }
}
Поскольку я не хочу фактически удалять какие-либо элементы меню, я установил их в базе данных как удаленные.
В запросе linq у меня нет проблем с исключением пунктов меню, помеченных как удаленные.
Моя проблема в том, что свойство Children включает в себя пункты меню, помеченные как удаленные, когда я комбинирую его с помощником древовидной структуры от Мэтта Хидигера: http://www.matthidinger.com/archive/2009/02/08/asp.net-mvc-recursive-treeview-helper.aspx.
childrenProperty (root) возвращаетэлементы, помеченные как удаленные:
private static void AppendChildren<T>(StringBuilder sb, T root, Func<T, IEnumerable<T>> childrenProperty, Func<T, string> itemContent)
{
var children = childrenProperty(root);
if (children.Equals(null) && !children.Any())
{
sb.AppendLine("</li>");
return;
}
sb.AppendLine("\r\n<ul>");
foreach (T item in children)
{
RenderLi(sb, item, liContent, itemContent);
AppendChildren(sb, item, childrenProperty, liContent, itemContent);
}
sb.AppendLine("</ul></li>");
}
Возможно ли изменить отображение в OnModelCreating, чтобы оно включало запрос, в котором я могу исключить удаленные элементы меню?
Мое сопоставление, ссылающееся на себя:
modelBuilder.Entity<Menu>().HasMany(m => m.Children).WithOptional().HasForeignKey(m => m.ParentID);
Я не на том пути?Можно ли решить проблему по-другому?