Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:othersnet:dlinq [2009/03/25 09:24] alfred |
fw:othersnet:dlinq [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 4: | Línea 4: | ||
| ===== El modelo de datos ===== | ===== El modelo de datos ===== | ||
| El modelo de base de datos se muestra de forma visual en Visual Studio 2008 a partir de un archivo .dbml, puede ser editado mediante la Toolbox o arrastrando los elementos desde el administrador de servidores. \\ \\ | El modelo de base de datos se muestra de forma visual en Visual Studio 2008 a partir de un archivo .dbml, puede ser editado mediante la Toolbox o arrastrando los elementos desde el administrador de servidores. \\ \\ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| Línea 36: | Línea 40: | ||
| Product prod = new Product (); | Product prod = new Product (); | ||
| prod.ProductName = "Toy"; | prod.ProductName = "Toy"; | ||
| - | db.Products.Add (prod); | + | db.Products.InsertOnSubmit (prod); |
| + | db.SubmitChanges() | ||
| </code> | </code> | ||
| + | <del>''db.Products.Add (prod);''</del> <- Esto se podía hacer en anteriores versiones. | ||
| === Deletes === | === Deletes === | ||
| Línea 219: | Línea 225: | ||
| ===== Aplicaciones utilizando DLINQ ===== | ===== Aplicaciones utilizando DLINQ ===== | ||
| + | |||
| Línea 233: | Línea 240: | ||
| - Escoger un modelo Linq (el diseñador nos mostrará los objetos DataContext que existan en nuestro proyecto). | - Escoger un modelo Linq (el diseñador nos mostrará los objetos DataContext que existan en nuestro proyecto). | ||
| - Seleccionar tabla y campos que recogerá. En opciones avanzadas podemos también indicar si está habilitado para realizar operaciones de inserción, edición o eliminación. | - Seleccionar tabla y campos que recogerá. En opciones avanzadas podemos también indicar si está habilitado para realizar operaciones de inserción, edición o eliminación. | ||
| - | - Ahora, en las opciones del GridView, podemos escoger si habilitamos la paginación, el ordenado, el bororado... | + | - Ahora, en las opciones del GridView, podemos escoger si habilitamos la paginación, el ordenado, el borrado... |
| Esto generará un código con las columnas que se incluyen en el grid como ''<asp:BoundField>'', y mediante sus propiedades podremos acceder al texto de cabecera y demás... Si alguna no quisieramos mostrarla la borraríamos desde el código o desde el mismo editor. \\ \\ | Esto generará un código con las columnas que se incluyen en el grid como ''<asp:BoundField>'', y mediante sus propiedades podremos acceder al texto de cabecera y demás... Si alguna no quisieramos mostrarla la borraríamos desde el código o desde el mismo editor. \\ \\ | ||
| Podemos **cambiar el campo de una tabla**, por ejemplo uno que tenga identificadores por el nombre del registro correspondiente, cambiando el ''<asp:BoundField>'' por un ''<asp:TemplateField>''. Tipo lo siguiente: | Podemos **cambiar el campo de una tabla**, por ejemplo uno que tenga identificadores por el nombre del registro correspondiente, cambiando el ''<asp:BoundField>'' por un ''<asp:TemplateField>''. Tipo lo siguiente: | ||
| Línea 322: | Línea 329: | ||
| Lo malo es que no funcionará la edición. Esto es debido a que estamos haciendo una montaje personalizado en el método Selecting, y el LINQDataSource no tiene forma de saber cómo actualizar la entidad. Si queremos añadir soporte para la edición podríamos crear un control ObjectDataSource (al que le agregaríamos un método ''Update'' personalizado para contorlarlos), o hacer que el usuario navegue a una nueva página para hacer la actualización - y mostrar un ''DetailsView'' o ''FormView'' enlazado a la entidad Producto para la edición (y no intentar hacerlo en el grid). | Lo malo es que no funcionará la edición. Esto es debido a que estamos haciendo una montaje personalizado en el método Selecting, y el LINQDataSource no tiene forma de saber cómo actualizar la entidad. Si queremos añadir soporte para la edición podríamos crear un control ObjectDataSource (al que le agregaríamos un método ''Update'' personalizado para contorlarlos), o hacer que el usuario navegue a una nueva página para hacer la actualización - y mostrar un ''DetailsView'' o ''FormView'' enlazado a la entidad Producto para la edición (y no intentar hacerlo en el grid). | ||
| - | ===== Notas ===== | ||
| + | |||
| + | |||
| + | |||
| + | ===== Notas ===== | ||
| + | * Cuando estás creando un fichero .dbml a partir de unas tablas sin claves primarias definidas, si quieres que se generen listas de las clases agregadas tendrás que indicar tú las claves primarias a mano. | ||
| + | * No es aconsejable poner directamente el código de las clases parciales en el archivo derivado del .dbml, más vale ponerlo en archivos a parte. | ||
| + | * Cuando queremos que el ''DataContext'' se conecte en tiempo de ejecución a otra cadena de conexión no es aconsejable editar el fichero ''.designer.cs'' (donde se genera el código) ya que este cambiará al editar el .dbml. Lo mejor es agregar una clase parcial y escribir el constructor por defecto, entonces este ya no se generará y en los otros controles se utilizará el creado. También sería correcto cambiar la propiedad ''ApplicationSettings'' de la conexión del dbml poniendola a false. | ||
| + | <code csharp> | ||
| + | partial class databaseDataContext | ||
| + | { | ||
| + | public databaseDataContext() | ||
| + | : base(codegest.Configuration.getConnectionString().ConnectionString, mappingSource) | ||
| + | { | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | * Podemos cambiar el namespace de donde se generará el DataContext a partir de la propiedad ''Context namespace'' del .dbml y el namespace de donde se generarán las clases de las tablas generadas con la propiedad ''Entity Namespace''. | ||
| + | * Al trabajar con SQL Servers "antiguos", al actualizar texto este se intenta comparar con el que había anteriormente y acaba por lanzar una excepción debido a que no lo permiten. La solución es indicar ''UpdateCheck = UpdateCheck.Never''. | ||