Код Entity Framework 4 сначала против дерева - PullRequest
3 голосов
/ 25 апреля 2011

Я планирую проект, который будет использовать Asp.net MVC 3 и Entity Framework 4 Code-First.Когда я писал прототип, я обнаружил проблему.Как я могу отобразить дерево в EF4?Я не думаю, что это:

class AmazingEntity
{
    public int AmazingEntityId;
    public AmazaingEntity Parent;
    public IList<AmazingEntity> Children;
}

Было бы легко поддерживать и эффективно.Как я могу сделать это правильно (лучше всего было бы использовать собственный HierarchyID MSSQL или какой-то другой эффективный метод отображения дерева.

С уважением и заранее,
Paweł Łuczkiewcz.

1 Ответ

3 голосов
/ 25 апреля 2011

Entity Framework предлагает только способ, который вы описали, потому что это правильная реализация древовидной структуры в объектном мире.Если вы хотите использовать какие-либо специфические функции базы данных, вы должны обернуть их в пользовательские представления базы данных и отобразить эти представления.Проблема с этим подходом состоит в том, что представление будет только для чтения, поэтому вам все еще понадобится упомянутая сущность для изменения дерева.

Почти каждый раз, когда мне нужно выполнить любой запрос, связанный с обходом иерархии, я использую CTE в настраиваемом представлении.или хранимой процедуры и использовать эту конструкцию SQL в EF.Это просто то, что EF не обрабатывает эффективно.

Как видите, ни одна из этих функций на самом деле не соответствует подходу, основанному на коде.Сначала чистый код не позволяет использовать какие-либо специфические функции базы данных (если вы не добавите их вручную в пользовательском инициализаторе базы данных).Сначала код будет использовать определенную вами сущность и создаст самосвязанную связь «один ко многим».Это будет все.В первом коде вы не можете ожидать каких-либо специфических функций базы данных или скрытой логики базы данных, потому что это то, что вы не можете указать в отображении.

Первый код предназначен для ситуаций, когда вы хотите быстро определить структуру вашего объекта ипросто позвольте EF создать БД для вас.Если вы хотите принять какие-либо решения о базе данных и о том, как она должна быть спроектирована, вы должны сначала вернуться к базе данных.

...