Jorge Serrano
  • Home

LINQ to Entities y Visual Basic 2008 – Parte 1

  • By jorge
  • Ene-24-2008
  • Sin categoría
  • 13 Comments.

Visual Studio 2008


LINQ to Entities (L2E) 


Resumen general de lo publicado sobre LINQ hasta el momento:




  • Información general sobre LINQ



    • LINQ HOL para Visual Basic 2008


    • VBTeam – Aprendiendo LINQ para Visual Basic 2008


    • LINQ HOL para C# 3.0


    • LINQ to Entities o LINQ to SQL


  • LINQ to Objects



    • Empezando con LINQ y Visual Basic 2008


    • LINQ, Visual Basic 2008 y array de clases


  • LINQ to XML



    • LINQ, Visual Basic 2008 y XML



  • LINQ to DataSet



    • LINQ, Visual Basic 2008 y DataSet



  • LINQ to SQL



    • LINQ to SQL y Visual Basic 2008


Después de haber visto introductoriamente LINQ to DataSet y LINQ to SQL, ahora le toca el turno a LINQ to Entities dentro del paradigma de LINQ y ADO.NET.


Recordando el modelo de Microsoft .NET Framework 3.5, observamos que LINQ to Entities (LINQ sobre Entidades) se encuentra dentro de LINQ y ADO.NET. El diagrama general de la arquitectura LINQ es el siguiente:



Mientras que LINQ to SQL es utilizado para trabajar con fuentes de datos SQL Server, LINQ to Entities es utilizado fundamentalmente (además de por otras razones) para trabajar con múltiples fuentes de datos.


Para desarrollar el siguiente ejemplo de introducción a LINQ to Entities al igual que en el caso del ejemplo de LINQ to SQL, vamos a utilizar el modelo de datos utilizado en el excelente libro de Octavio Hernández «C# 3.0 y LINQ”.


Iniciaremos un nuevo proyecto de VB utilizando como plantilla la plantilla de aplicación para Windows y agregaremos un nuevo elemento en el proyecto.


El nuevo elemento será de tipo ADO.NET Entity Data Model y de extensión edmx. A ese elemento le daremos el nombre de Futbol2006 como se indica en la siguiente imagen:



Nada más insertar este elemento, se iniciará un asistente con el cual podremos agregar las tablas, vistas y procedimientos almacenados de la fuente de datos con la que queremos trabajar.


En mi caso agregaré la fuente de datos de FUTBOL2006 y las tablas de la base de datos.


Una vez hecho esto, veremos que por un lado se agregan al proyecto los ensamblados necesarios para trabajar con datos y LINQ, y por otro lado, aparece en pantalla un diseñador de los objetos relacionales seleccionados.



Como podremos observar, las relaciones entre tablas aparecen dentro del diagrama del modelo de datos de entidades. Cada entidad queda perfectamente representada y como aspecto adicional, veremos que se establecen unas relaciones entre tablas de manera tal que la clave extranjera de una tabla aparezca en el apartado Navigation Properties de la entidad.


Partiendo por lo tanto de este modelo de entidades, vamos a trabajar ahora con él.


Dentro del formulario, vamos a agregar un control ComboBox (cboClubs), un control Button (btnSelectPlayers) y un control DataGridView (dgvPlayers).


Nuestro ejemplo en ejecución mostrará los jugadores de un club de futbol.


A continuación, vamos a escribir el siguiente código:







Imports LINQtoEntities.Futbol2006Model

 

Public Class MainForm

   
‘ Declaramos el contexto para usarlo en todo el programa
   Private contexto As New Futbol2006DataContext()

   
Private Sub btnSelectPlayers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectPlayers.Click
      ‘ Recuperamos la información que queremos buscar
      Dim codeClub As String = Me.cboClubs.SelectedValue.ToString()
      
‘ Obtenemos los datos de Futbolistas segel equipo seleccionado
      Dim datos = From p In contexto.Futbolista _

                          Where p.Club.Codigo = Me.codeClub _

                          Select p.Id, p.Nombre, p.Sexo, p.FechaNacimiento, CodigoPaisNacimiento = p.Pais.Codigo, _

                          CodigoClub = p.Club.Codigo, p.Posicion _
                          OrderBy Id, Nombre, Sexo, FechaNacimiento, CodigoPaisNacimiento, CodigoClub, p.Posicion
      
‘ Volcamos los datos en el DataGridView
      Me.dgvPlayers.DataSource = datos
      
‘ Ajustamos los datos al control
      Me.dgvPlayers.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
   
End Sub

   Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
‘ Ejecutamos el mpara cargar los Clubs de Futbol
      LoadClubs()
   
End Sub

   Private Sub LoadClubs()
      
‘ Cargamos los Clubs de Futbol
      Dim datos = From p In contexto.Clubs Select p.Codigo, p.Nombre
      
Me.cboClubs.DataSource = datos
      
‘ Indicamos el valor a mostrar
      Me.cboClubs.DisplayMember = «Nombre»
      ‘ Indicamos el co clave asociado al valor mostrado
      Me.cboClubs.ValueMember = «Codigo»
   End Sub

End
 Class


El resultado de ejecutar nuestra aplicación de ejemplo es el que se indica a continuación:



Ahora bien, si observamos con atención esta pantalla y el código escrito, y en concreto la instrucción Select p.Id, p.Nombre, p.Sexo, p.FechaNacimiento, CodigoPaisNacimiento = p.Pais.Codigo, CodigoClub = p.Club.Codigo, p.Posicion, veremos que el orden de los campos mostrados en el DataGridView no es el que esperábamos, o al menos no el que nos gustaría obtener. Además tenemos también una claúsula OrderBy que indicaría teóricamente un orden. ¿Porqué se da este comportamiento?.


Esto lo dejaremos así hasta la siguiente entrega que será dentro de muy poco.


Actualización de esta entrada (25/01/2008):




  • Pasaros por la entrada de Juan Carlos González (CIIN) para obtener más información.


  • Para el que quiera trabajar con LINQ to Entities desde VS 2008, leeros LINQ to Entities o LINQ to SQL que también indicaba como referencia en el inicio de esta entrada o por esta otra de Juan Carlos González (CIIN).

Comments

13 Responsesso far

  1. anonymous dice:
    24 enero, 2008 a las 11:12 pm

    Hola, el elemento ADO.NET Entity Data Model no aparece en mi VS2008, a que puede deberse?

    Responder
  2. anonymous dice:
    25 enero, 2008 a las 12:00 am

    PingBack desde Futbol Argentino Mexicano y espanol » LINQ to Entities y Visual Basic 2008 – Parte 1

    Responder
  3. jorge dice:
    25 enero, 2008 a las 7:35 am

    Hola Jorge,

    he actualizado en esta entrada un par de aspectos para cubrir tu pregunta y para agregar más información como la que ha agregado Juan Carlos (CIIN) en su blog.

    Para poder trabajar con LINQ to Entities, tendrás que instalar Microsoft ADO.NET Entity Framework Beta 3 (actualmente aún no está en versión final).

    Para más información al respecto, léete la entrada http://geeks.ms/blogs/jorge/archive/2007/12/11/linq-to-entities-o-linq-to-sql.aspx.

    En el blog de Juan Carlos, también encontrarás otra referencia sobre lo mismo: http://geeks.ms/blogs/ciin/archive/2008/01/16/ado-net-entity-framework-lo-que-necesitas-para-empezar.aspx

    Espero que todo esto te ayude.

    Si acaso ya nos contarás.

    Un saludo.

    Responder
  4. jcgonzalez dice:
    25 enero, 2008 a las 8:19 am

    Hola Jorge!
    Muy buena entrada y gracias por incluir mis post en la actualización que has hecho.

    Un abrazo

    JC’s

    Responder
  5. ohernandez dice:
    25 enero, 2008 a las 10:35 am

    Hola, Jorgito!

    Excelente post, y gracias por la referencia.

    SUGERENCIA: También sería muy interesante que escribieras sobre LINQ to XML y las facilidades que da VB 9 que C# no tiene (literales, operadores…)

    ¡Viva VB!

    Abrazo – Octavio

    Responder
  6. jorge dice:
    25 enero, 2008 a las 10:44 am

    Jajajaja, perfecto Octavio, me parece perfecto.

    P.D.: espero que no te importe que haga referencia al modelo de datos «made in Octavio».

    Intentaré hacer lo que me pides después de escribir un par de cosas más sobre LINQ to Entities que tengo en la trastienda. 😉

    De todos los modos, la entrada siguiente muestra (adelanto algo ya) un error que he encontrado con LINQ to Entities y el binding de los datos hacia un DataGridView por ejemplo, para que veas que aunque VB tiene cosas muy interesantes que no tiene C#, hay otras que nos hace bien VB y sí C# como es lo que hablaré próximamente. 😉

    Abrazotes fenómeno.

    Y… para el que no tenga el libro de LINQ de Octavio, ¡¡¡SE LO RECOMIENDO!!! (avisados quedáis)

    Responder
  7. ohernandez dice:
    25 enero, 2008 a las 3:45 pm

    Jorgito,

    Claro que no me importa, ¡al contrario!
    Curiosidad: el modelo puede ser «made in Octavio», pero la base de datos es «created by the Hernandez-Bunin family», ya que fueron mis hijos quienes introdujeron los datos a partir de una aplicación Windows Forms que yo les hice 🙂

    Responder
  8. jorge dice:
    25 enero, 2008 a las 5:48 pm

    ¡Caramba!, y ¿a cuánto les pagabas la palabra?.

    Muchas gracias a tus hijos también entonces. 🙂

    Responder
  9. penyaskito dice:
    26 enero, 2008 a las 1:04 am

    Hola Jorge,

    Me ha sorprendido que utilices «clave extranjera». ¿No debería ser «clave ajena»? Es lo más habitual en la literatura de bases de datos.

    Sea como fuere, gracias por el artículo.

    Responder
  10. jorge dice:
    26 enero, 2008 a las 7:48 am

    Hola penyaskito,

    lo cierto es que yo siempre lo he oído citar de los dos modos, pero cuando estudié Bases de Datos en la Universidad, el profesor nos enseñó a decir de forma general clave extranjera y con esa palabra más que con clave ajena (que usaba creo recordar en el álgebra relacional y la normalización de base de datos) es con la que me he quedado.

    Se me ha ocurrido investigar a raiz de tu comentario y estos enlaces son algunos de los que he encontrado (http://es.wikipedia.org/wiki/ADO.NET en el que habla de clave extranejera y http://es.wikipedia.org/wiki/Integridad_de_datos en el que habla de clave ajena).

    Muchas gracias por tu comentario.

    Un saludo.

    Responder
  11. anonymous dice:
    12 febrero, 2008 a las 12:47 pm

    Introducción En las entradas anteriores que he tratado sobre LINQ, hemos visto inicialmente ( Parte 1

    Responder
  12. anonymous dice:
    25 octubre, 2010 a las 4:52 pm

    lo dicho, quien use vb creo que se está confundiendo de profesion

    y si se supone que vb es mejor que c# será porque os gusta programar mal con código que se trague todo lo que le echéis

    Responder
  13. anonymous dice:
    16 mayo, 2011 a las 7:43 am

    en este ejemplo las mismas tablas y claves ajenas
    ¿cómo se hace para insertar datos en en la tabla Futbolista teniendo en cuenta las claves ajenas?

    Gracias

    Responder

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Jorge Serrano

MVP Reconnect


Donaciones
Donation

Entradas recientes

  • Go – Constants
  • Go – Tipos de Datos
  • Go – Variables
  • Hello Go-rld!
  • Introducción a Go o Golang
  • JSON Patch en ASP.NET Core 5 Web API
  • Null Checking en C#
  • ¿Porqué mi página web por defecto de ASP.NET Core no se vé en mi Azure Web App y me da un 404?
  • .NET 5 lanzado oficialmente – detalles y consideraciones
  • Configurar el Pipeline de Azure DevOps para compilar proyectos .NET 5

Categorías

  • .NET 5
  • .NET Core
  • .NET Core 3.0
  • .NET Core 3.1
  • .NET Framework 2.0
  • .NET Framework 3.0
  • .NET Framework 3.5
  • .NET Framework 4.0
  • .NET Framework 4.5
  • .NET Framework 4.6
  • .NET Framework 4.7
  • .NET Framework 4.8
  • .NET Standard 2.0
  • .NET Standard 2.1
  • AMQP
  • Android
  • Angular
  • API REST
  • Apple
  • Apple iOS
  • Apple macOs
  • Arquitectura
  • ASP.NET
  • ASP.NET Core
  • ASP.NET Core 3
  • ASP.NET Core 5
  • AWS
  • Azure App Service
  • Azure Application Insights
  • Azure Cosmos DB
  • Azure Database Migration Service
  • Azure Databricks
  • Azure DevOps
  • Azure Event Grid
  • Azure Functions
  • Azure IoT
  • Azure Portal
  • Azure PowerShell
  • Azure Queue Storage
  • Azure SQL
  • Azure Storage
  • Azure Virtual Datacenter
  • Azure WebApps
  • Big Data
  • Bing
  • Blazor
  • Blog
  • Bots
  • C#
  • C# 7.0
  • C# 7.1
  • C# 7.2
  • C# 7.3
  • C# 8.0
  • C# 9.0
  • Channel 9
  • Codeplex
  • Codespaces
  • Containers
  • Debugging
  • DevOps
  • Docker
  • Electron
  • Entity Framework
  • Entity Framework Core
  • Entity Framework Core 3.0
  • Entity Framework Core 5
  • Eventos
  • F#
  • FaaS
  • FeatureFlags
  • FeatureToggles
  • Feeds
  • Fluent Assertions
  • General
  • GIMP
  • Git
  • GitHub
  • Go
  • Google
  • Google Analytics
  • Gradle
  • gRPC
  • GSA
  • Historia de la Informática
  • HoloLens
  • HtmlAgilityPack
  • IdentityServer4
  • Inkscape
  • Ionic
  • iOS
  • IoT
  • Java
  • JavaScript
  • JDBC
  • JSON
  • Kubernetes
  • Lenguajes de Programación
  • Libros y Cursos
  • LINQ
  • Linux
  • LiteDB
  • Machine Learning
  • macOS
  • Microservices
  • Microsoft
  • Microsoft .NET Framework 4.5
  • Microsoft 365
  • Microsoft Azure
  • Microsoft Build
  • Microsoft Ignite
  • Microsoft Learn
  • Microsoft Orleans
  • Microsoft Surface Go
  • Microsoft Teams
  • ML.NET
  • MQTT
  • MRO
  • MS-DOS
  • MsCoders Madrid
  • MVP
  • NancyFx
  • Node.js
  • NoSQL
  • NuGet
  • NUnit
  • OData
  • ODP.NET Core
  • Office 2007
  • Office 2010
  • Office 2013
  • Office 2016
  • Office 2019
  • Office 365
  • Open Source
  • Open XML SDK
  • Opinión
  • Orchard CMS
  • OT
  • PaaS
  • Patterns
  • PdfSharpCore
  • Performance
  • PHP
  • Postman
  • Power BI
  • PowerShell
  • PowerShell Core
  • Productividad
  • Project Server 2019
  • R
  • Rendimiento
  • Scala
  • Scraper
  • Security
  • Serverless
  • Service Fabric
  • SharePoint Server 2019
  • SignalR
  • Sin categoría
  • Sistemas Distribuidos
  • Skype
  • Skype for Business Server 2019
  • Small Basic Online
  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017
  • SQL Server 2019
  • STOMP
  • Swagger
  • Testing
  • TFS 2017
  • TFS 2018
  • Tools
  • TypeScript
  • Unity
  • UWP
  • UX
  • Visio
  • Visual Basic
  • Visual Studio 2010
  • Visual Studio 2012
  • Visual Studio 2013
  • Visual Studio 2015
  • Visual Studio 2017
  • Visual Studio 2017 for Mac
  • Visual Studio 2019
  • Visual Studio 2019 for Mac
  • Visual Studio App Center
  • Visual Studio Code
  • Visual Studio IntelliCode
  • Visual Studio Live Share
  • Visual Studio Live Share Audio
  • Visual Studio Online
  • VS Anywhere
  • Vue.js
  • Web API
  • WebAssembly
  • WinDbg
  • Windows
  • Windows 10
  • Windows Compatibility Pack
  • Windows Phone 10
  • Windows Phone 7
  • Windows Phone 8
  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2016
  • Windows Server 2019
  • Windows Service
  • WinForms
  • WinUI
  • WPF
  • Xamarin
  • Xbox
  • Xcode
  • Xiaomi Mi Band 2
  • xUnit
  • YAML

Archivos

  • enero 2021
  • diciembre 2020
  • noviembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • julio 2020
  • junio 2020
  • mayo 2020
  • abril 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • diciembre 2019
  • noviembre 2019
  • octubre 2019
  • septiembre 2019
  • agosto 2019
  • julio 2019
  • junio 2019
  • mayo 2019
  • abril 2019
  • marzo 2019
  • febrero 2019
  • enero 2019
  • diciembre 2018
  • noviembre 2018
  • octubre 2018
  • septiembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • abril 2018
  • marzo 2018
  • febrero 2018
  • enero 2018
  • diciembre 2017
  • noviembre 2017
  • octubre 2017
  • septiembre 2017
  • agosto 2017
  • julio 2017
  • junio 2017
  • febrero 2015
  • octubre 2014
  • junio 2014
  • marzo 2014
  • febrero 2014
  • enero 2014
  • diciembre 2013
  • septiembre 2013
  • agosto 2013
  • julio 2013
  • junio 2013
  • abril 2013
  • febrero 2013
  • enero 2013
  • diciembre 2012
  • noviembre 2012
  • septiembre 2012
  • agosto 2012
  • junio 2012
  • mayo 2012
  • abril 2012
  • marzo 2012
  • febrero 2012
  • enero 2012
  • diciembre 2011
  • noviembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • julio 2011
  • junio 2011
  • mayo 2011
  • abril 2011
  • marzo 2011
  • enero 2011
  • diciembre 2010
  • noviembre 2010
  • octubre 2010
  • septiembre 2010
  • agosto 2010
  • julio 2010
  • junio 2010
  • mayo 2010
  • abril 2010
  • marzo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • septiembre 2009
  • agosto 2009
  • julio 2009
  • junio 2009
  • mayo 2009
  • abril 2009
  • marzo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • septiembre 2008
  • agosto 2008
  • julio 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • febrero 2008
  • enero 2008
  • diciembre 2007
  • noviembre 2007
  • octubre 2007
  • septiembre 2007
  • agosto 2007
  • julio 2007
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007
  • febrero 2007
  • enero 2007
  • diciembre 2006
  • noviembre 2006
  • octubre 2006
  • septiembre 2006
  • agosto 2006
  • julio 2006
  • junio 2006
  • mayo 2006
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search
  • twitter

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.