Проектирование узлов дерева в Entity Framework Code First - PullRequest
0 голосов
/ 11 июня 2011

Я хочу спроектировать базовый класс узлов дерева, из которого могут быть получены другие классы сущностей, я думал, что это будет так:

public abstract class BaseTreeNode
{
  public string Id{get;set;}

  public string Name{get;set;}

  public string ParentId{get;set;}

  [ForeignKey("ParentId")]
  public BaseTreeNode ParentNode{get;set;}
}

public class MenuNode:BaseTreeNode
{

}

Однако, похоже, это не работает, когда вы пытаетесь построить некоторые иерархии с классом MenuNode. Это вызвало SqlException: недопустимое имя объекта 'dbo.BaseTreeNode', когда я вызвал метод SaveChanges.

Я думал, что проблема была в свойстве 'ParentNode', поскольку это абстрактный класс. Итак, как мне спроектировать мои классы в этом случае с помощью кода Entity Framework 4.1.

Большое спасибо!

1 Ответ

0 голосов
/ 08 июля 2012

Проблема этого подхода - производительность. Возможно, вы захотите хранить несколько типов деревьев в БД (Menu / SubMenu, Category / Subcategory), но этот тип наследования приведет к тому, что все они будут храниться вместе в одной таблице. Смотрите этот вопрос: Каковы плюсы и минусы одной основной базовой таблицы, от которой наследуются все сущности?

Вопрос в том, будет ли когда-нибудь необходимо запрашивать все типы узлов, независимо от типа дерева.

...