Ответ 1
Я нашел решение здесь - мне нужно было добавить
.SetAttribute("not-found", "ignore");
к отображению.
Я использую NHibernate, чтобы вытащить некоторые данные из старого db, и я обнаружил несколько случаев, когда есть внешний ключ, но ссылочная строка была удалена.
Когда я делаю сопоставление NHibernate (используя Fluent NHibernate так:
References(d => d.Group)
.WithColumns("groupId", "dataset")
.SetAttribute("lazy", "true");
Я получаю унифицированный прокси для Group
при загрузке корневого объекта, за которым следует ObjectNotFoundException
, когда я пытаюсь его использовать.
Если я отключу ленивую загрузку, сразу после загрузки корня я получаю ObjectNotFoundException
.
Следовательно: существует ли способ, чтобы NHibernate делал нуль Group
при загрузке корня? Или можно как-то проверить унифицированный прокси-сервер, чтобы увидеть, удастся ли ему выполнить загрузку строки?
Я нашел решение здесь - мне нужно было добавить
.SetAttribute("not-found", "ignore");
к отображению.
Вы подтвердили, что ваше ссылочное свойство все еще загружается лениво? Для того, чтобы NHibernate загружал ссылки лениво, необходимо убедиться, что ссылка NOT NULL. Когда вы устанавливаете not-found = "ignore", вы косвенно указываете NHibernate, что существует вероятность того, что ссылка может не существовать, поэтому предотвращение того, чтобы ограничение NOT NULL было действительным. В случае, о котором вы описали выше, вы не столкнетесь с ошибкой, но вы можете наблюдать быстрый вызов базы данных для загрузки вашей группы.
В приложении я работаю над настройкой
lazy="proxy"
решил проблему.