Можно ли избежать NHibernate.ObjectNotFoundException, когда существует внешний ключ, но ссылка на строку не существует? - PullRequest
18 голосов
/ 06 марта 2009

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

Когда я делаю свое сопоставление NHibernate (используя Fluent NHibernate примерно так:

References(d => d.Group)
    .WithColumns("groupId", "dataset")
    .SetAttribute("lazy", "true");

Я получаю унифицированный прокси для Group при загрузке корневого объекта, а затем ObjectNotFoundException, когда я пытаюсь его использовать.

Если я отключаю отложенную загрузку, я сразу получаю ObjectNotFoundException при загрузке рута.

Следовательно: есть ли способ сделать NHibernate нулевым Group при загрузке рута? Или можно как-то проверить унитизированный прокси-сервер, чтобы увидеть, удастся ли ему загрузить строку?

Ответы [ 4 ]

16 голосов
/ 09 марта 2009

Я нашел решение здесь - мне нужно было добавить

.SetAttribute("not-found", "ignore");

к отображению.

2 голосов
/ 07 апреля 2009

Вы убедились, что указанное вами свойство все еще загружается? Чтобы NHibernate загружал ссылки лениво, необходимо убедиться, что ссылка НЕ ​​НЕДЕЙСТВИТЕЛЬНА. Когда вы устанавливаете not-found = "ignore", вы косвенно говорите NHibernate, что существует вероятность того, что ссылка может не существовать, что препятствует действию ограничения NOT NULL. В случае, который вы описали выше, вы не столкнетесь с ошибкой, но вы можете наблюдать активный вызов в базу данных для загрузки вашей группы.

2 голосов
/ 06 марта 2009
0 голосов
/ 08 мая 2013

В приложении я работаю над настройкой

lazy="proxy" 

решил проблему.

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