mvc - crear pagina web asp.net c#
¿Cuál es el "mejor" marco/enfoque de acceso a datos para C#y.NET? (4)
Añadido para las nuevas tecnologías:
Con Microsoft Sql Server fuera para Linux en Beta en este momento, creo que está bien no ser independiente de la base de datos. La ruta .Net Core Path y MS-SQL le permite ejecutarse en servidores Linux como Ubuntu completamente sin dependencias de Windows.
Como tal, imo, un flujo muy bueno es no usar un marco completo de ORM o controles de datos y aprovechar el poder de los Proyectos de Estudio Visual de SSDT (Herramientas de Datos del Servidor SQL) y un Micro ORM.
En Visual Studio puede crear un proyecto de servidor SQL como un proyecto legítimo de Visual Studio. Al hacerlo, le permite crear la base de datos completa a través de los diseñadores de tablas o la edición de consultas sin procesar en el interior de Visual Studio.
En segundo lugar, obtiene la herramienta de comparación de esquemas de SSDT que puede usar para comparar su proyecto de base de datos con una base de datos en vivo en Microsoft Sql Server y actualizarlo. Puede sincronizar su Visual Studio Project con el servidor haciendo que las actualizaciones de su proyecto salgan al servidor. O puede sincronizar el servidor con su proyecto haciendo que su código fuente se actualice. A través de esta ruta, puede recoger fácilmente los cambios que hizo el DBA anoche en mantenimiento y anular sus nuevos cambios de desarrollo para una nueva característica fácilmente con una herramienta simple.
Con la misma herramienta, puede calcular el script de migración sin ejecutarlo realmente, si necesita pasarlo a un departamento de operaciones y enviar una orden de cambio, funciona para ese flujo.
Ahora, para escribir código en su base de datos MS-SQL, recomiendo PetaPoco.
Porque PetaPoco funciona perfectamente en línea con la solución SSDT anterior. PetaPoco viene con plantillas de texto T4 que puede usar para generar todas sus clases de entidad de datos, y genera las clases de capa de datos masivos para usted.
El problema es que tienes que escribir consultas tú mismo, lo cual no es algo malo.
Entonces terminas con algo como esto:
var people = dbContext.Fetch<Person>("SELECT * FROM People where Username Like ''%@0%''", "bob");
PetaPoco maneja automáticamente la parametrización @ 0 para usted, también tiene la práctica clase Sql para crear consultas.
Además, PetaPoco es un orden de magnitud más rápido que EF6 y 8+ veces más rápido que EF7.
Así que, en total, esta solución implica el uso de SSDT para la gestión de SCHEMA, y PetaPoco para la integración del código en beneficio de una alta capacidad de mantenimiento, personalización y muy buen rendimiento.
La única desventaja de este enfoque es que te estás vinculando al servidor Microsoft SQL. Sin embargo, imo, Microsoft Sql Server es uno de los mejores RDBM que existen.
Tiene DBMail, trabajos, capacidades de objetos CLR, y así sucesivamente. Además, la integración entre Visual Studio y el servidor MS-SQL es fenomenal y no obtienes nada de eso si eliges un RDBMS diferente.
(EDIT: lo hice una wiki de la comunidad, ya que es más adecuada para un formato de colaboración).
Hay una gran cantidad de formas de acceder a SQL Server y otras bases de datos desde .NET. Todos tienen sus pros y sus contras y nunca será una pregunta simple de cuál es "mejor"; la respuesta siempre será "depende".
Sin embargo, estoy buscando una comparación a un alto nivel de los diferentes enfoques y marcos en el contexto de diferentes niveles de sistemas . Por ejemplo, me imagino que para una aplicación Web 2.0 rápida y sucia, la respuesta sería muy diferente de una aplicación interna de nivel de empresa CRUD.
Soy consciente de que hay numerosas preguntas sobre el Desbordamiento de pila que trata con los subconjuntos de esta pregunta, pero creo que sería útil tratar de construir una comparación de resumen. Me esforzaré por actualizar la pregunta con correcciones y aclaraciones a medida que avanzamos.
Hasta ahora, este es mi entendimiento a un alto nivel, pero estoy seguro de que está mal ... Me estoy enfocando principalmente en los enfoques de Microsoft para mantener esto enfocado.
Entidad marco ADO.NET
- Agnóstico de base de datos
- Bueno porque permite intercambiar backends dentro y fuera
- Mal porque puede afectar al rendimiento y los proveedores de bases de datos no están tan contentos con eso.
- Parece ser la ruta preferida de MS para el futuro
- Complicado para aprender (aunque, ver 267357 )
- Se accede a través de LINQ a Entidades, por lo que proporciona ORM, lo que permite la abstracción en su código
LINQ to SQL
- Futuro incierto (ver ¿Está LINQ to SQL realmente muerto? )
- Fácil de aprender (?)
- Solo funciona con MS SQL Server
- Ver también Pros y contras de LINQ.
ADO.NET "standard"
- No ORM
- Sin abstracción, por lo que vuelve a "rodar el tuyo" y juega con SQL generado dinámicamente.
- Acceso directo, permite potencialmente un mejor rendimiento.
- Esto se relaciona con el antiguo debate sobre si centrarse en los objetos o en los datos relacionales, a lo que, por supuesto, la respuesta es "depende de dónde se encuentre la mayor parte del trabajo" y, dado que esa es una pregunta sin respuesta, esperamos que no Tengo que entrar en eso demasiado. En mi humilde opinión, si su aplicación está manipulando principalmente grandes cantidades de datos, no tiene sentido abstraerla demasiado en objetos en el código de usuario, es mejor utilizar procedimientos almacenados y SQL dinámico para hacer la mayor parte del trabajo como posible en el back-end. Considerando que, si usted tiene principalmente la interacción del usuario que causa la interacción de la base de datos en el nivel de decenas o cientos de filas, entonces ORM tiene sentido completo. Por lo tanto, supongo que mi argumento a favor de la buena ADO.NET pasada sería en el caso de que manipules y modifiques grandes conjuntos de datos, en cuyo caso te beneficiarás del acceso directo al backend.
- Otro caso, por supuesto, es cuando tiene que acceder a una base de datos heredada que ya está protegida por procedimientos almacenados.
Controles de fuente de datos ASP.NET
¿Son estos algo completamente diferente o solo una capa sobre el estándar ADO.NET? - ¿Realmente usaría estos si tuviera un DAL o si implementara LINQ o Entidades?
NHibernate
- Parece ser un ORM muy poderoso y poderoso?
- Fuente abierta
Algunos otros enlaces relevantes; NHibernate o LINQ to SQL Entity Framework vs LINQ to SQL
Creo que LINQ to SQL es bueno para proyectos dirigidos a SQL Server.
ADO.NET Entity Framework es mejor si nos dirigimos a diferentes bases de datos. Actualmente creo que muchos proveedores están disponibles para ADO.NET Entity Framework, Provider para PostgreSQL, MySQL, esql, Oracle y muchos otros (consulte http://blogs.msdn.com/adonet/default.aspx ).
Ya no quiero usar ADO.NET estándar porque es una pérdida de tiempo. Siempre voy por ORM.
Debo decir que nunca usé NHibernate durante el inmenso tiempo necesario para comenzar a usar ... el tiempo perdido en la configuración XML .
Recientemente hice una aplicación web en MVC2 , donde elegí ADO Entities Framework y uso Linq todo el tiempo.
Debo decir que me impresionó la velocidad ! y nuestro sitio tenía alrededor de 35 000 visitantes únicos por día, en un ancho de banda de alrededor de 60 Gb por día (reduje radicalmente este número de 60 Gb al alojar todos los archivos estáticos en Amazon S3.
Siempre iré por este camino . Es fácil comenzar (solo agregue un nuevo elemento de datos, elija tablas y listo) para cada cambio en la base de datos, solo necesitamos actualizar el modelo (creado automáticamente en solo 2 clics) y es divertido de usar. ¡Reglas de Linq!
Después de haber trabajado en más de 20 proyectos diferentes de C # / ASP.NET, siempre termino usando NHibernate . A menudo comienzo con una pila completamente diferente: ADO.NET, ActiveRecord, manualidades extravagantes. Existen numerosas razones por las que NHibernate puede funcionar en una amplia gama de situaciones, pero lo más destacado para mí es el ahorro en el tiempo, especialmente cuando se vincula a la generación de código. Puede cambiar el modelo de datos y las entidades se reconstruyen, pero no es necesario cambiar la mayoría o el resto del código.
MS tiene un hábito desagradable de impulsar tecnologías en esta área que son paralelas al código abierto existente, y luego dejarlas caer cuando no despegan. ¿Alguien recuerda los espacios de objetos?