удаляя подкласс, удаляет также и родительский - PullRequest
0 голосов
/ 04 декабря 2010

У меня есть ситуация, когда я использую таблицу для каждого подкласса для ассоциации. Отображения в порядке, пока я не попытаюсь удалить запись из таблицы подклассов. Причина удаления - это не только подкласс, который нужно удалить, но и родитель. Я могу понять, что эта функция может быть задумана, но есть ли способ просто удалить подкласс?

Вот мой пример кода.


public class ParentClassMap : ClassMap<Parent>
{
    public ParentClassMap ()
    {
        Table("tblParent");
        Id(x => x.ParentId).Column("ParentId").GeneratedBy.Identity()
        ... other properties
    }
}

public class ChildClassMap : SubClassMap<Child>
{
    public ChildClassMap()
    {
        Table("tblChild");
        KeyColumn("ParentId");
        ... other properties
    }
}

Теперь, когда я запрашиваю запись, все выглядит нормально


Child child = session.CreateCriteria<Parent>().Add(Restrictions.Eq("ParentId", 1)).UniqueResult<Parent>();

Но когда я удаляю дочерний элемент, выполняемый sql включает обновления всех таблиц, которые ссылаются либо на Parent, либо на Child, затем удаление Child, а затем Parent.


session.Delete(child);

Я хочу удалить только дочерний объект, возможно ли это?

1 Ответ

4 голосов
/ 04 декабря 2010

Нет, это невозможно.

Подумайте об этом в терминах ООП: если у вас есть объект класса Dog, который наследуется от Animal, имеет ли смысл «удалить собаку, но оставить животное»?

Что подводит меня к следующему пункту: если вы можете удалить «часть» объекта, тогда вы должны не использовать подкласс, а ассоциацию (вероятно, один к одному или много к-одному)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...