NHibernate выпускает нежелательные заявления сирот - PullRequest
2 голосов
/ 19 сентября 2010

Представьте, что у меня есть отношения Родитель / Ребенок, управляемые NHibernate.

Я получаю родительский объект из обратной передачи MVC, которая редактирует его свойства; Я хочу сохранить только родительский элемент в базе данных, не загружая потомков из базы данных.

Во время сохранения родитель имеет свойство Children, которое имеет значение null (поскольку оно не было загружено; однако в базе данных для этого родителя есть действительные дочерние элементы).

Когда я сохраняю измененного Родителя (ID = 100), NHibernate выдает инструкцию «SET Child.ParentId = NULL WHERE Child.ParentId = 100». Я не хочу, чтобы это произошло, потому что там могут быть настоящие дети. Мне не нужно загружать их из базы данных перед сохранением, чтобы не потерять их.

Беглые отображения выглядят так (истинные имена сущностей, обобщенные для этого поста):

    public ParentMapping()
    {
        Table("Parent");
        Id(x => x.Id).Column("Id").GeneratedBy.Identity();
        Map(x => x.ParentProperty1).Column("ParentProperty1").Not.Nullable();

        HasMany(x => x.Children).Cascade.None();
    }

    public ChildMapping()
    {
        Table("Children");
        Id(x => x.Id).Column("Id").GeneratedBy.Identity();

        Map(x => x.ChildProperty1).Column("ChildProperty1").Not.Nullable();

        References(x => x.Parent).Column("Parent_Id").Not.Nullable().Fetch.Select();
    }

Подводя итог, я хочу сохранить обновленный экземпляр Parent, который был извлечен из более ранней сессии ISession (и передан в браузер и обратно через анализ модели MVC); его свойство Children имеет значение null, но в действительности в базе данных содержится много детей. Я не хочу, чтобы NHibernate вообще выдавал какие-либо изменяющие операторы в таблицу Children.

Я экспериментировал с Cascade.None () и LazyLoad () в надежде, что это подтолкнет NHibernate вести себя по-другому, но не повезло.

Любое понимание будет оценено. Спасибо!

Jeff

1 Ответ

0 голосов
/ 21 сентября 2010

Вы должны указать Inverse (), чтобы nhibernate сказал не беспокоиться об этой стороне коллекции.

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