Pregunta

he estado investigando lo que la capa de datos a utilizar para un nuevo proyecto basado en la web que estoy diseñando y estoy muy interesado en mirar a la incorporación de LINQ a SQL. Su aparente simplicidad, flexibilidad y diseñador de apoyo realmente apelaciones y el tie-in implícita a SQL Server está muy bien.

Sin embargo, se ha anunciado recientemente que LINQ a SQL va a tomar un asiento trasero a Entity Framework ahora que se ha pasado al equipo de ADO.NET ( http://blogs.msdn.com/ adonet / archivo / 2008/10/29 / update-en-linq-to-sql-y-LINQ a las entidades de roadmap.aspx ). Claro, que estará apoyado en el futuro, pero es poco probable que se vea mucho más trabajo de desarrollo.

Con esto en mente, me recomiendan mí usando esta tecnología para mi proyecto o ¿merece la pena, ya sea seleccionando un ORM alternativa (NHibernate?) O la codificación manualmente una DAL genéricos?

El proyecto en sí es ASP.NET y SQL Server 2005/2008 y posiblemente basado utilizará MVC, a pesar de que todavía está en fase beta. Es un proyecto personal, la base de datos no será excesivamente complejo y que será utilizado principalmente como un prototipo para mirar .NET tecnología de futuro. Estaría basando los proyectos futuros en lo que aprendo de éste sin embargo, por lo que las decisiones que tome afectarán soluciones más grandes en el futuro.

Y sí, soy consciente de que Microsoft probablemente traerá a toda una nueva tecnología de acceso a datos de mañana de todos modos! ;)

¿Fue útil?

Solución

Bueno, está cubierto en su mayoría en respuestas aquí (algunos puntos de vista interesantes también) ya, pero voy a decirlo de nuevo de todos modos ..

LINQ a SQL (L2S) es muy versátil, pero se siente un poco demasiado básica de mi punto de vista. En la mayoría de los casos se hace un buen trabajo al hacer las cosas simples, pero tan pronto como le preguntas a un poco más de lo mismo, se pone caro. Esto no es en absoluto una mala cosa. De hecho, creo LINQ a SQL realidad suppliments Entity Framework muy bien.

Tome automático de localización, siendo LinqDataSource por ejemplo. Si no se especifica Ordenar Por / Grupo Por entonces es bastante económico. El tiro de ordenar o agrupar en la mezcla y usted empieza a ser un aumento en el rendimiento (se convierte en muy hablador). A continuación, más o menos tiene que escribir su propia implementación de paginación (que no es terriblemente difícil, lo admito).

Yo seré el primero en admitir que L2S tiene la ventaja sobre el marco de la entidad en cuanto a la calidad de la generada T-SQL (que debería, ya que L2S está construido específicamente para la consulta de SQL Server) y conceptualmente y symantically, gran parte de LINQ a SQL es similar a EF, pero donde se golpea la pared es en la expansión de las necesidades y la consideración de los requisitos de aplicación más complicados.

Si tuviera que empezar de cero y optar por dedicar el tiempo de desarrollo personal, me quedaría con el marco de la entidad. Curiosamente, estoy trabajando en un proyecto en el momento que utiliza L2S y está siendo diseñado para escalar nad manejar cargas pesadas, pero cuando llegamos a algunos de los requisitos más "creativos", que se ven obligados a ampliar en SQL metal (por ejemplo, muchos-a-muchos relaciones).

Así que .. en fin .. Me lo planteo así:

a) aprender LINQ to SQL como una introducción (a patrones de ORM de Microsoft y la tecnología) .. se pone familiarizarse con la mayoría de los aspectos fundamentales que son compartidos con el marco de la entidad, y el sabor de la consulta estilo de LINQ (un gusto adquirido si usted tiene un fondo en T-SQL)

b) una vez que tienes una manija en LINQ a SQL, me gustaría recomendar a saltar sobre el marco de la entidad para conocer los beneficios adicionales (eSQL etc)

c) Poner en marcha un proyecto de prueba de concepto en tanto y comparar los resultados.

Otros consejos

Pick NHibernate. Se mantendrá por algún tiempo como un concepto o el ORM real. Por lo que será útil para aprender tanto.

OMI, todo esto fue muy exagerado.

Microsoft no dijo que LINQ a SQL estaría muerto. Ellos más indicaron que se fusionó en marco de la entidad.

Me centrarse en el uso de Entity Framework como una solución, sabiendo que gran parte de la LINQ a SQL saldrá en él.

En realidad no hay mucha diferencia en este momento de todos modos. La queja más grande es que el marco de la entidad no es de peso ligero. Hace que realmente importa, siempre y cuando tenga una buena separación entre los niveles?

L2S es, en mi humilde opinión, perfectamente bien tal como es y como se ha dicho, no va a ninguna parte. La empresa para la que trabajo ha hecho que sea nuestro estándar para el acceso a datos y estamos utilizando para todo, desde pequeños nichos de 5 aplicaciones de usuario a usuario 1000 + aplicaciones empresariales con grandes resultados.

Creo que los objetivos de la EDM nuestra mucho más grande que las de LINQ a SQL. Si usted está buscando un simple ORM entonces creo que LINQ to SQL es el camino a seguir. Si usted planea en la construcción en las clases que tienen una estructura de herencia en relación con las tablas de base que tienen una estructura relacional y hacer otras proyecciones avanzadas, a continuación, EDM podría ser una buena opción.

Es importante mencionar que este sitio está construido usando LINQ a SQL. Jeff habló acerca de su uso en el podcast StackOverflow.

L2S es una tecnología impresionante, y yo nunca volvería a ADO de edad.

Sin embargo, como usted ha mencionado, está tomando un asiento trasero a L2E. L2S es más que capaz y he han hecho numerosas aplicaciones con ella y han sido muy satisfechos. Pero al escuchar que ya no se adelantará puso un cuchillo en el costado. Así que fui a la salida L2E y es casi lo mismo cuando se trata de SQL interacción, y de muchas maneras que le resulte más fácil, por no mencionar más eficiente con su manejo relación. Con tales similitudes, parece lógico elegir L2E.

escribí un post en hacer el cambio y la comparación de los dos marcos: http://naspinski.net/post/Getting-started-with-Linq-To-Entities.aspx

Casi puedo garantizar que va a ser feliz con cualquiera de estos marcos, que son un regalo del cielo para el desarrollo. La evitación simplicidad y error es insuperable. Me inclinaría personalmente para L2E ya que será desarrollado de manera más agresiva thatn L2S.

Yo uso L2S en gran medida de mi proyecto web actual y creo que el más grande de colgar se encuentra está en conflicto documentación relativa a la mejor manera de hacer el desarrollo de la base de datos de nivel n.

En primer lugar y ante todo lo que necesita para darse cuenta por adelantado, es decir, objetos DataContext están destinados a durar sólo mientras unidad de trabajo , y punto. Además, de DataContext no tienen estado. Una vez que se llega a enfrentarse con estos dos principios, el uso de LINQ en un entorno de n niveles empieza a funcionar bien.

Por otro lado, verá un número de personas recomendar algunas formas muy muy muy malos para utilizar LINQ. No vuelvas a hacer sus DataContext estática, esto es un error que hice desde el principio y que funcionó de maravilla hasta que no funcionaba, entonces era absolutamente horrible con el cruce de datos incorrectos a través de diferentes sesiones, etc. En pocas palabras, este es tal vez el mayor más gigantesco no-no de utilizar LINQ y debe ser escrito en grandes letras en negrita en cada documento. Además, la persistencia de un DataContext en una variable de sesión es una igualmente mala idea.

El único otro importante desagradable me encontré con LINQ es cuando se hace una actualización desconectado, es necesario utilizar el mismo DataContext a través de toda la llamada. Por ejemplo:

    public static void UpdateUser(UserLibrary.User user) {
        using (UserLibraryDataContext dc = new UserLibraryDataContext(_conStr))
        {
            UserLibrary.User newUser = (from user2 in dc.Users where user2.UserID == user.UserID select user2).FirstOrDefault();
            newUser.Email = user.Email;
            newUser.FirstName = user.FirstName;
            newUser.LastName = user.LastName;
            dc.SubmitChanges();
        }        

No se puede simplemente pasar un usuario creado en un DataContext diferente y esperar actualización funcione, a menos que establezca DataContext.ObjectTrackingEnabled = false, lo que no lo recomendaría. En cambio, dentro de la misma DataContext que debe recuperar el objeto existente, actualizar sus valores, a continuación, enviar que los cambios. Mantenga todas las tareas como dentro de la misma DataContext.

Yo recomendaría L2S embargo, una vez que llegue a algunas cuestiones insignificantes (como el anterior), que es una gran tecnología y sin duda un gran ahorro de tiempo. No obstante recomendaría hacer una envoltura delgada alrededor de su DAL, para que pueda cambiar fácilmente. Estoy considerando (por razones económicas) portar una parte de mi código para usar OpenAccess ORM -> MySQL para una parte de mi acceso a los datos, y con una capa adecuadamente definido, esta tarea se deben sólo a mí tomar unas pocas horas.

Estoy de acuerdo con Echostorm. L2S es bueno para sus necesidades. Y es muy fácil trabajar con él ...

Si el diseño de su aplicación adecuada y aislar el acceso al usuario datos de la capa así, hay que ir con L2S. De lo que deduzco de tu post, no es un gran proyecto, por lo L2S deben satisfacer sus necesidades muy bien, mientras que el viejo y simple ADO.NET es sólo un-no no, y Marco de la entidad, es ... simplemente no lo use , ¿Okay? De todos modos, si aísla así el DAL, puede intercambiar L2S a algo más en el futuro si el proyecto crece. e incluso si L2S no va a ninguna parte, no va a ninguna parte. MS dejó de invertir en ella, pero que no va a ser obsoleta o algo así, por lo que sigue siendo una inversión segura. Por otra parte, se debe evaluar NHibernate, que es simple y maduro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top