Ответ 1
EF по-прежнему является новорожденным в отношении сопротивления объекта. Он использует наследование базового объекта, которое иногда может заставить вас потерять возможность наследования при проектировании. Это может быть исправлено с новой версией EF, и тем не менее ей не хватает гибкости NHibernate.
NHibernate - это порт для .NET Hibernate в JAVA. Скорее всего, сейчас будет такая же зрелость, если я правильно помню из версии 3.0 NHibernate. Он использует либо сопоставление атрибутов, либо XML-сопоставление, либо вы можете использовать Fluent NHibernate или ConfORM, которые позволяют вам сопоставлять объекты в объектно-ориентированном и, необязательно, на основе соглашений.
Несмотря на то, что EF4, по-видимому, обеспечивает большую производительность в некотором роде, мое предпочтение по-прежнему связано с использованием NHibernate, так как оно оказалось более гибким с другими двигателями базы данных, отличными от SQL Server, IMHO.
Пожалуйста, убедитесь сами: