Подтвердить что ты не робот

Можно ли исключить NHibernate.ObjectNotFoundException, когда есть внешний ключ, но ссылочная строка не существует?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 3

Вы подтвердили, что ваше ссылочное свойство все еще загружается лениво? Для того, чтобы NHibernate загружал ссылки лениво, необходимо убедиться, что ссылка NOT NULL. Когда вы устанавливаете not-found = "ignore", вы косвенно указываете NHibernate, что существует вероятность того, что ссылка может не существовать, поэтому предотвращение того, чтобы ограничение NOT NULL было действительным. В случае, о котором вы описали выше, вы не столкнетесь с ошибкой, но вы можете наблюдать быстрый вызов базы данных для загрузки вашей группы.

Ответ 4

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

lazy="proxy" 

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