SubSonic и древовидная структура - PullRequest
1 голос
/ 22 октября 2009

Мне нужно хранить древовидную структуру (например, папки) в моей базе данных. Модель, которую я выбрал, довольно проста: таблица имеет FolderId (PK, int, identity), некоторые случайные атрибуты и обнуляемый ParentId (same-table-FK to FolderId, int, nullable).

Всё отлично работает и всё. Я использую шаблон ActiveRecord от SubSonic. Есть ли способ, чтобы у моего сгенерированного класса Folder были атрибуты Parent / Children вместо просто «Folders»?

Я подозреваю, что мне нужно отредактировать шаблон, вероятно, ActiveRecord.tt. Если так, может кто-нибудь указать мне на отправную точку? Может быть, кто-то сделал что-то подобное?

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Все сгенерированные классы являются частичными, так что вы можете делать то, что вы делали выше, но просто создать для него частичный класс, чтобы он был в "одном и том же" классе ...

1 голос
/ 22 октября 2009

Полагаю, было слишком поздно, чтобы увидеть очевидное: я могу просто сделать что-то вроде

partial class Folder
{
    public Folder Parent
    {
        get {
            if (_ParentId.HasValue)
            {
                var repo = ACME.Folder.GetRepo();
                return
                    (from items in repo.GetAll()
                     where _ParentId.Value == items._FolderId
                     select items).First();
            }
            else 
                return null;
        }
    }

    public IQueryable<Folder> Children
    {
        get {
            var repo = ACME.Folder.GetRepo();
            return from items in repo.GetAll()
                   where _FolderId == items.ParentId
                   select items;
        }
    }
}
...