Спасение родителей и детей - PullRequest
2 голосов
/ 30 мая 2009

В моей схеме есть пара таблиц с отношениями PK и FK. Я создал DAL, используя генератор SubSonic. Если я создаю нового родителя и его потомков, как мне сохранить обоих? Отдельно или за один выстрел?

, например

Parent.Save();  
ChildCollection.SaveAll();

Я попробовал описанное выше, но это не работает, потому что у ChildCollection нет идентификатора его родителя. Нужно ли присваивать родительские идентификаторы каждому ребенку самостоятельно или есть возможность сохранить все это за один раз?

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Предположение: Ваши Первичные Ключи автоматически генерируются Вашей Базой данных. Если это так, то сначала вам нужно будет сохранить () родительский объект, а затем заполнить свойство ParentID в каждом из объектов в ChildrenCollection. Сделав это, вы сможете сохранить () свою коллекцию Children.

        Parent.Save();
        ChildCollection.ForEach(x => x.ParentID = Parent.ParentID);
        ChildCollection.SaveAll();
0 голосов
/ 30 мая 2009

Вы можете использовать частичные классы с пользовательской перегрузкой функции сохранения, чтобы обеспечить желаемую функциональность.

public partial class Class1
{
    public void Save(bool childern)
    {
        Save();

        if (childern)
        {
            //based on primary/foreign key SubSonic provides
            //methods to fetch child collections related to
            //this (primary key) table.
            ChildernCollection col = Childerns();

            col.SaveAll();
        }
    }
}
...