2011-08-04 16 views
6

Tengo una aplicación web con:Entity Framework: ¿es adecuado para la aplicación Enterprise Level?

  • 1 terabyte DB
  • más de 200 mesas
  • Al menos 50 mesas con 1+ millones de registros de cada
  • 10 + desarrolladores
  • 1000 de los usuarios concurrentes

Actualmente, este proyecto utiliza Ad-Hoc Sql, que se genera mediante una solución personalizada de ORM. En lugar de admitir el ORM personalizado (al que le faltan muchas características avanzadas), estoy pensando en cambiar a Entity Framework.

Utilicé EF 4.1 (Code-First) en un proyecto más pequeño y funcionó bastante bien, pero ¿es escalable para un proyecto mucho más grande anterior?

Respuesta

8

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

2

Adecuado es un término interesante. ¿Es utilizable? Sí, y encontrará una serie de buenas características adecuadas para el desarrollo rápido de aplicaciones. Dicho esto, es una especie de tecnología a medio cocinar, y carece de muchas funciones avanzadas de su propio predecesor, LINQ to SQL (incluso 3 años después de su primer lanzamiento). Aquí hay algunas molestias:

  • pobre soporte LINQ complejo
  • Sin Enum tipos de propiedad
  • Missing Conversiones de SQL (DateTime analizar, analizar int, etc.) (aunque se puede poner en práctica estas funciones definidas a través de modelo)
  • pobre legibilidad SQL
  • problemas para mantener múltiples SSDL/CSDL recursos/msl independiente para sharding (no es realmente un problema con el código primero)
  • problemas con el funcionamiento de varias transacciones concurrentes en dife alquilar
  • problemas de ObjectContext con escenarios entidad independiente

Dicho esto, Microsoft ha dedicado mucho esfuerzo a la misma, y ​​es de esperar que va a seguir mejorando con el tiempo. Personalmente, dedicaría tiempo a implementar un patrón bien resumido de Repositorio/Unidad de trabajo para que su código no sepa que está usando EF en absoluto y si es necesario, usted puede cambiar a otro proveedor de LINQ a DB en el futuro.

La mayoría de los ORM modernos serán un paso adelante de SQL ad-hoc.

Cuestiones relacionadas