Отображение NHibernate и HasMany - PullRequest
       14

Отображение NHibernate и HasMany

0 голосов
/ 18 апреля 2011

У меня есть тривиальное отображение для двух объектов: опрос и опрос

Опрос:

public class PollMap : ClassMap<Poll>
{
    public PollMap() {
        Id(x => x.Id);

        Map(x => x.Content);

        HasMany(x => x.PollOptions).Cascade.All();
    }
}

POLLOPTION:

public class PollOptionMap : ClassMap<PollOption>
{
    public PollOptionMap() {
        Id(x => x.Id);

        Map(x => x.Content);

        References(x => x.Poll);
    }
}

в тестовом коде я пытаюсь удалить первый опрос объекта опроса

Код теста:

    [Transaction]
    public ActionResult Add() {

        var poll = new Poll() {
            Content = "poll",
            PollOptions = new List<PollOption>() {
                new PollOption(){
                    Content="PollOption#1"
                },
                new PollOption(){
                    Content="PollOption#2"
                }
            }
        };

        GetSession.Save(poll);

        return Content("Added");
    }

    [Transaction]
    public ActionResult Removed() {

        var poll = GetSession.Query<Poll>().FirstOrDefault();

        poll.PollOptions.RemoveAt(0);

        GetSession.Update(poll);

        return Content("Updated");
    }

когда действие удаления сработало, оно не удаляло polloption из db, вместо этого оно установило ноль в моем внешнем ключе: (

polloption table

пс. гугл не помог

1 Ответ

1 голос
/ 18 апреля 2011

Cascade.All() удаляет дочерний объект, только если родительский объект удален. Если вы хотите, чтобы дочерние элементы были удалены при удалении из коллекции, вам нужно Cascade.AllDeleteOrphan().

Дополнительное примечание: Вы также должны пометить одну сторону двунаправленной ассоциации как Inverse(). Подробнее об этом здесь: http://nhibernate.info/doc/nh/en/index.html#collections-bidirectional

...