Свободный NHibernate не может изменить запись поиска? - PullRequest
0 голосов
/ 02 марта 2012

Хорошо, я новичок в NHibernate, так что, может быть, кто-то здесь может объяснить это.У меня есть 3 таблицы / сущности:

  • Приложения
  • Роли
  • ApplicationRoles

Как это звучит, ApplicationRoles - это таблица поиска, котораяимеет внешние ключи для Applications и Roles, а также для некоторых других полей, таких как IsActive.

Теперь в коде ApplicationRole есть ссылка на обоих родителей - Application и Role.А объект Application имеет List, поэтому он может ссылаться на дочерние объекты ApplicationRole.Роль нет, но я попытался добавить ее, и это, похоже, не имеет значения.

Проблема, с которой я столкнулся, заключается в том, что я не могу загрузить объект ApplicationRole напрямую, манипулировать им и сохранить его снова.Я могу загрузить объект либо по его собственному PK, либо по обоим FK, и я могу изменить его поле IsActive, но когда я сохраняю его обратно в базу данных, я получаю сообщение об ошибке «коллекция не обработана с помощью flush» в объекте Application иэто другие дочерние коллекции.

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

Если я загружаю объект Application и манипулирую его дочерним объектом ApplicationRole и сохраняю само приложение, это работает, но я чувствую, что не долженсделать это.

РЕДАКТИРОВАТЬ: уточнил отношения данных

1 Ответ

1 голос
/ 02 марта 2012

Вы можете полностью отказаться от класса ApplicationRole

Application
{
    public IList<Role> Roles { get; private set; }
}

// in ApplicationMap
HasManyToMany(a => a.Roles)
    .Table("ApplicationRole")
    .ParentKeyColumn("application_id")
    .ChildKeyColumn("role_id")
    .Cascade.AllDeleteorphan();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...