Создание классов POCO, совместимых с NHibernate и EF 4.1 - PullRequest
2 голосов
/ 03 июня 2011

Я знаю, что все члены класса POCO для NHibernate должны быть определены как виртуальные, а в EF (сначала код) вам нужно только установить объекты коллекции / ссылки как виртуальные для отложенной загрузки.

Так что, если я хочу создать объекты POCO, совместимые как с EF, так и с NH, я должен просто объявить каждый член моих классов POCO как виртуальный ??

Причина, по которой вы этого хотите, заключается в том, что в настоящее время мы оцениваем как EF, так и NHibernate ORM, и если мы в конечном итоге изменяем наши планы в будущем, нам не нужно обновлять наши POCO

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

EF нужны виртуальные навигационные свойства для отложенной загрузки, но он также использует virtual скалярные / сложные свойства для динамического отслеживания изменений, поэтому, если вы пометите все свойства как virtual, это будет правильный подход.

Во всяком случае, вы оцениваете заранее. virtual Свойства будут минимальной проблемой, если вы решите изменить ORM позже - вы найдете гораздо более сложные проблемы.

1 голос
/ 03 июня 2011

Или, в качестве альтернативы, если вы создаете интерфейс или абстрактную базу для своих POCO, вы можете использовать атрибут <class name="MyPoco" proxy="IMyPoco"/> в NHibernate, который также устраняет необходимость в виртуальных свойствах, поскольку NH затем откладывает создание своих подклассов из прокси, а не непосредственно из вашего POCO.

1 голос
/ 03 июня 2011

На самом деле вы не обязаны объявлять каждое свойство виртуальным в NH.Если вы отключите режим отложенной загрузки (по умолчанию «включен»), вам больше не нужно объявлять все эти «виртуалы» и указывать в каждом конкретном случае, какие свойства загружаются с отложенной загрузкой.

, если хотите, у вас может быть POCO с виртуальными ссылочными объектами как в NH, так и в EF.

Sidenote: Во всяком случае, и просто ради этого я бы объявил все свойства как виртуальные и покончил бы с этим:)

...