nhibernate и виртуальные свойства класса?

Ошибка с неопределенной ссылкой возникает на этапе компоновки, а не на этапе компиляции и сборки. На этапе компиляции будут искать заголовочные файлы и, как вы видите, он правильно находит каталог pthread.h из каталога sysroot include. После компиляции он должен вызвать компоновщик для создания исполняемого двоичного файла и там, где он терпит неудачу.

При связывании необходимо добавить libpthread к командной строке компоновщика, чтобы компоновщик мог найти функцию pthread_create и связать ее с конечным исполняемым файлом, обычно это делается с помощью указания LDFLAGS, которое затем добавляется к вызову компоновщика. ,

Драйвер компилятора (gcc) можно использовать для выполнения шагов компиляции и компоновки. поэтому, когда вы добавляете опцию -pthread к компилятору, а компилятор также используется для выполнения компоновки, он преобразует эту опцию в -lpthread в cmdline компоновщика, который затем находит libpthread и связывает его.

16
задан Kevin Panko 9 February 2016 в 20:33
поделиться

2 ответа

Я предлагаю вам прочитать Должно ли все быть виртуальным с NHibernate?

Быстрый ответ на этот вопрос: потому что нам нужно, чтобы участники были виртуальными чтобы выполнить нашу ленивую загрузку магия / вуду.

Более длинный ответ интереснее хотя. Важная особенность, что любой реальный ORM должен быть прозрачным Lazy Загрузка. Если вы получите объект через ORM, вы не хотите автоматически втягивать весь объект график (по крайней мере, не по умолчанию), но вы не хочу засорять ваш код проверяет, есть ли определенные ассоциации были уже загружены, а затем загрузка их при необходимости. Это ORM обязанность. В идеале вы хотите иметь доступ к свойствам и иметь ORM загружает необходимые данные по первый доступ к этим свойствам, если данные еще не получены.

19
ответ дан 30 November 2019 в 21:37
поделиться

Как сказал Эндрю, свойства виртуальны для запуска отложенной загрузки. Вот объяснение того, почему это так: Во время выполнения NHibernate заменит ваши объекты недвижимости прокси-объектами. После доступа к ним прокси-объекты знают, как получить для вас реальные объекты. Если пометить свойства как виртуальные, такая замена может произойти.

6
ответ дан 30 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: