Удаление записи «один в ноль» или одной дочерней записи не работает - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь отобразить пару таблиц, в которых первичный ключ в Bar является внешним ключом для Foo , то есть отношения 1..0: 1.

Мои сопоставления выглядят так:

class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Table("Foo");

        Id(x => x.Id).Column("ID");

        HasOne(x => x.Bar).Cascade.All();
    }
}

class BarMapping : ClassMap<Bar>
{
    public BarMapping()
    {
        Table("Bar");

        Id(x => x.FooId).GeneratedBy.Foreign("Foo");

        HasOne(x => x.Foo).Constrained();
    }
}

Проблема в том, что когда я пытаюсь удалить экземпляр Bar , установив Foo.Bar = null и Bar.Foo = null, запись делаетне удаляются из базы данных.

Что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Существует другое грязное решение, связанное с использованием HasMany и Cascade.AllDeleteOrphan.

class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
       Table("Foo");
       Id(x => x.Id).Column("ID");
       HasMany(x => x.Bar).KeyColumn("FooId").Cascade.AllDeleteOrphan();
    }
}
0 голосов
/ 26 июня 2019

Итак, в основном проблема в том, что вы используете Cascade.All() в отображении Foo. Вместо этого вы должны использовать Cascade.AllDeleteOrphan().

Cascade.All

когда объект сохраняется / обновляется / удаляется, проверьте связи и сохраните / обновите / удалите все найденные объекты.

Cascade.AllDeleteOrphan

когда объект сохраняется / обновляется / удаляется, проверьте связи и сохраните / обновите / удалите все найденные объекты. В дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удаляйте его.

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