EntityFramework Interoperable

Sabemos que una de las tareas más costosas en el desarrollo de una solución de software, es la creación de la capa de acceso a datos. Como ya sabemos, Microsoft hoy en día nos ofrece una brillante alternativa en cuanto a ORM. El EntityFramework, que soporta originalmente en el fondo a MS Sql Server. Sin embargo, en este artículo veremos cómo nuestras tecnologías están abiertas a ser interoperables con otros motores de bases de datos como MySql y PostgreSQL.

Para este post, me he permitido invitar a Emerson Perdomo. Ingeniero de Sistemas de la Universidad Distrital de Bogotá. Gran colaborador en nuestra subsidiaria de Microsoft Colombia quien ha estudiado bastante el tema de ORM y creación automática de formularios basados en clases. Las siguientes instrucciones fueron creadas por él, para ayudarnos a comprender el proceso de conectar el EntityFramework a otras fuentes de datos.

PostgreSQL

Npgsql - .Net Data Provider for Postgresql es un conjunto de DLLs que se agregan a Visual Studio .Net pero no se integran con el Wizard del Visual Studio .Net porque no hay soporte oficial de Npgsql, sin embargo, se pueden agregar en cada uno de los proyectos sin ningún problema; el inconveniente es que al intentar usarlas hay que generar el modelo desde "Visual Studio 2008 Command Prompt" e incluir los dos archivos ".cs" que genera al proyecto.
A Continuación doy los pasos para poder usarlo en un ejemplo sencillo.

PASO 1:

Descargue de la página oficial de Npgsql
https://pgfoundry.org/frs/?group_id=1000140

El archivo:
Npgsql2.0.8-bin-ms.net3.5sp1.zip

Npgsql2.0.8-bin-ms.net3.5sp1.zip

Descargue la Última versión de PostgreSQL
https://www.enterprisedb.com/products/pgdownload.do#windows

Obviamente hay que tener
Visual Studio 2008 Professional Edition Trial con SP1
https://www.microsoft.com/express/Downloads/

.Net Framework 3.5
https://www.microsoft.com/downloads/details.aspx?FamilyID=d0e5dea7-ac26-4ad7-b68c-fe5076bba986&displaylang=es

PASO 2:

Instalamos el PostgreSQL , el Visual Studio, .NET Framework 3.5 y descomprimimos el Npgsql2.0.8-bin-ms.net3.5sp1.zip recomiendo que lo descompriman en C:\ para que no estén buscando la ubicación.
Ahora vamos a registrar nuestras DLL de Npgsql en el GAC de Visual Studio.
Primero hay que abrir nuestro "Visual Studio 2008 Command Prompt" que se encuentra por lo general en "Inicio -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt "
Ahí ejecutamos las siguientes líneas de código:
gacutil -i c:\ubicacion de la dll Npgsql\Npgsql.dll
gacutil -i c:\ubicacion de la dll Mono.Security\ Mono.Security.dll
en mi caso
gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Npgsql.dll
gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Mono.Security.dll

PASO 3:

Ahora hay que agregar una línea de código XML al archivo machine.config del Framework que por lo general se encuentra en C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\
Abrimos el Archivo machine.config con el editor de su preferencia.
Y agregamos en el área de <DbProviderFactories> </DbProviderFactories>
la Siguiente línea de código

<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
</DbProviderFactories>

PASO 4:

Ahora abrimos el motor de base de datos PostgrsSQL y creamos una base de datos sencilla
Base de datos Test
https://www.megaupload.com/?d=2XS1OYGU
Recuerda que la base de datos esta sin datos hay que alimentarla.

PASO 5:

Ahora ejecutamos la siguiente línea de código en el "Visual Studio 2008 Command Prompt".
c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"string de conexion" /project:NombreQueQuiera /language:CSharp
En mi caso
c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"DATABASE=test;HOST=127.0.0.1;PORT=5432;PASSWORD=yta;USER ID=postgres" /project:TestPostgreSQL /language:CSharp
Los Archivos van a quedar en esta Ubicación
C:\Program Files\Microsoft Visual Studio 9.0\VC
De ahí lo pasas al proyecto que estés trabajando y Solo agregas los archivos ".cs":

Insertando modelo de Postgresql en solución VS

Puedes encontrar más información sobre los Archivos de extensión.
CSDL en :
https://msdn.microsoft.com/es-mx/library/bb399169.aspx

MSL en :
https://msdn.microsoft.com/es-mx/library/bb399202.aspx

SSDL en :
https://msdn.microsoft.com/es-mx/library/bb399559.aspx
No te preocupes si salen errores de referencia en el siguiente paso especificamos cuales son.

PASO 6:

Ahora hay que agregar unas referencias:
System.Data.Entity
System.Runtime.Serialization

Después de esto Tendrás que crear el App.Config y configurar la cadena de conexión.
Y listo ahora es posible hacer CRUD a la base de datos, para ver el ejemplo terminado dejo el SourceCode.
https://www.megaupload.com/?d=CORN5YVQ
__________________________________________________________________________________________________________________________________________

MySql

MySql Entity Framework es fácil de configurar ya que solo tienes que descargar el Mysql Connector de la página oficial https://dev.mysql.com/downloads/connector/net/
Instalarlo y listo, lo puedes Usar exactamente igual que Entity Framework para Sql Server.
Claro está que debes tener previamente instalado el Visual Studio 2008 con SP1