martes, 24 de mayo de 2011

Resumen de ASP.NET con SQL Server Compact Edition 4.0

Ya estamos preparados para nuestro primer proyecto web con SQL Server CE 4.0.

Si recordáis, en anteriores post hablamos ya sobre CE y sobre como romper el hielo por primera vez con esta base de datos y sobre como desplegar nuestra aplicación en un entorno de hosting compartido sin necesidad de que esté instalado CE en el equipo host.

Ahora que un compañero se ha incorporado al proyecto, ha tenido que preparar su máquina y siendo así, ha sido un momento excepcional para hacer un post resumen de “preparación a CE”. Además, al final del post también haremos un resumen sobre despliegue para que queda todo reflejado en un solo post, tanto instalación como despliegue. Los pasos que hemos seguido han sido los siguientes:

Instalar (si es que aún no lo tenías instalado), Visual Studio 2010 Service Pack 1. Lo puedes descargar desde este enlace o desde WPI (Web Platform Installer).

Instalar SQL Server CE 4.0. De nuevo, podemos elegir entre la descarga directa desde aquí aquí, o instalarlo desde WPI. A mí la verdad es que WPI me da más seguridad porque detecta dependencias entre paquetes y si es necesario las instala también.

clip_image002

Si eres un estudioso y te gusta tener la documentación del producto instalada en tu equipo, también puedes descargar los BOL (Book On Line) de CE desde aquí. Por supuesto, este paso es opcional.

En este momento ya tienes instalado el CE en tu equipo, pero para poder trabajar con CE necesitarás, bien WebMatrix (que fue el primer producto en dar soporte a CE 4.0, pero yo no quiero verlo ni en pintura) o bien instalar Visual Studio 2010 SP1 Tools for SQL Server Compact 4.0, de nuevo desde WPI.

clip_image004

clip_image006

Lo cierto es que, aunque el add-in, add-on, plug-in o como quieras llamarlo, de Visual Studio es suficiente, hay otra herramienta que es must-have y que es SQL Server Compact Toolbox. Está disponible en codeplex  en http://sqlcetoolbox.codeplex.com/ o también desde el administrador de extensiones de Visual Studio. Insisto es que un aplicación muy interesante y que viene a complementar la ya existente en VS.

clip_image008

Por último, si estás utilizando Membership en tu proyecto de ASP.NET, hay que agradecer hasta el infinito y más allá, la aportación de un proveedor de Membership, Role y Profile que se han trabajado en http://sqlcemembership.codeplex.com/.

De hecho, el autor de este proyecto es el mismo que el del add-in SQL Server Compact Toolbox. Su web es http://erikej.blogspot.com/ y es toda una página de referencia sobre CE. También te puedes fijar que en codeplex tiene abiertos más proyectos, todos ellos relativos a CE… y digo yo… ¿Por qué no lo contrata Microsoft? ¿O es que Microsoft le despidió porque sabía demasiado? ;-)

Si hablamos ahora del despliegue, nosotros con ASP.NET 3.5 (creo que con ASP.NET 4.0 serían los mismos pero no puede asegurarlo) y proyecto de sitio web (no he podido hacerlo funcionar en una aplicación web y sigo sin poder hacerlo funcionar) son los siguientes:

Copiar todo el contenido del directorio C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private (excepto el fichero System.Data.SqlServerCe.Entity.dll) en el directorio \bin de nuestro sitio web.

De este modo, veremos cómo se agrega a nuestro sitio web una referencia a System.Data.SqlServerCe de tipo BIN.

clip_image010

Cuando publiques, también tendrás que dar permisos de “Modificar” al directorio \App_Data (donde estarán nuestras bases de datos .sdf) y también al directorio \bin (esto es importante y nos ha dado más de un dolor de cabeza!!).

Por último, si estás escribiendo código de acceso a datos independiente de la base de datos subyacente (puedes ver un pequeño tutorial aquí), estarás utilizando System.Data.Common. En este caso tienes que agregar lo siguiente a tu fichero web.config:

  <runtime>

    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">

      <dependentAssembly>

        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>

        <bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>

      </dependentAssembly>

    </assemblyBinding>

  </runtime>

 

  <system.data>

    <DbProviderFactories>

      <remove invariant="System.Data.SqlServerCe.4.0"/>

      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

    </DbProviderFactories>

  </system.data>

 

Por último y como apunte sencillo, un ejemplo de cadena de conexión contra nuestras bases de datos .sdf sería algo como:

  <connectionStrings>

    <add name="EjemploCE" connectionString="Data Source=|DataDirectory|\Ejemplo.sdf" providerName="System.Data.SqlServerCe.4.0"/>

  </connectionStrings>

 

Seguro que durante el desarrollo de esta aplicación aparecen más cosas dignas de mención, pero por ahora creo que es un buen comienzo para intentar dar el salto a CE para pequeñas y medianas aplicaciones (sobre todo me entusiasma el no tener que depender de SQL Server Express en el hosting compartido).

Un saludo y a programar ASP.NET sobre CE!

No hay comentarios:

Publicar un comentario