I (altamente) de acuerdo con marvelTracker (y de a'vron) pensamientos.
Aquí es un poco de más información sin embargo:
estrategia clave
Hay un costo muy conocido cuando se utiliza GUID como claves principales.Fue descrito por Jimmy Nilsson y ha sido públicamente disponible al http://www.informit.com/articles/article.aspx?p=25862. NHibernate es compatible con la estrategia de clave primaria de GUIDCOMB. Sin embargo, lograr eso en EntityFramework es un poco complicado y requiere pasos adicionales.
enumeraciones
ADO.NET Entity Framework no admite de forma nativa enumeraciones. Hasta junio de CTP que añade soporte para enumeraciones http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx la única manera de hacer corresponder las enumeraciones estaba usando soluciones favor, mire: How to work with Enums in Entity Framework?
Consultas:
NHibernate ofrece muchas maneras para la consulta de datos:
- LINQ (utilizando el proveedor re-linq de re-motion, https://www.re-motion.org/web/)
- Consultas con nombre encapsuladas en objetos de consulta
- ICriteria/QueryOver para consultas donde los criterios no se conocen de antemano
- Uso de proyecciones y agregados de QueryOver (En los casos, solo necesitamos propiedades específicas de una entidad. En otros casos, podemos necesitar los resultados de una función agregada, como promedio o recuento):
- PagedQueries: En un esfuerzo por evitar abrumar al usuario y aumentar la capacidad de respuesta de la aplicación, los grandes conjuntos de resultados se dividen habitualmente en páginas más pequeñas de resultados.
- MultiQueries que combinan varias consultas ICriteria y QueryOver en una sola base de datos ida y vuelta
- Consultas independientes que son objetos de consulta en partes de la aplicación sin acceso a la sesión NHibernate. Estos objetos se ejecutan en otro lugar con una sesión. Esto es bueno porque podemos evitar repositorios complejos con muchos métodos.
de ISession QueryOver:
// Query that depends on a session:
premises = session.QueryOver<Premise>().List();
Independiente QueryOver:
// Full reusable query!
var query = QueryOver.Of<Premise>();
// Then later, in some other part of ther application:
premises = query.GetExecutableQueryOver(session).List(); // Could pass IStateleSession too.
de código abierto
NHibernate tiene una gran cantidad de proyectos de contribución disponibles en http://sourceforge.net/projects/nhcontrib/
Este proyecto ofrece una serie de extensiones muy útiles para NHibernate (entre otros):
- proveedores de memoria caché (caché de nivel 2)
- inyección de dependencias para las entidades sin constructor predeterminado
- de texto completo Buscar (integración Lucene.NET)
- Apoyo espacial (integración NetTopologySuite)
Soporte
EntityFramework viene con el soporte de Microsoft. NHibernate tiene una comunidad activa:
También, echar un vistazo a: http://www.infoq.com/news/2010/01/Comparing-NHibernate-EF-4