SharePoint 2010: Como usar Entity Framework al crear un modelo de BDC!

Cómo sabéis y ya he comentado en este blog, en SharePoint 2010 tenemos grandes mejoras a la hora de integrar datos de sistemas externos mediante los Business Connectivity Services (BCS). Para integrar estos datos, tenemos dos entornos posibles:

  • SharePoint Designer 2010 (SPD 2001).
  • Visual Studio 2010 (VS 2010).

De los dos entornos, sin duda es VS 2010 el que permite modelar escenarios más complejos y nos da cierta flexibilidad a la hora de crear modelos de BDC que nos faciliten la integración de esos sistemas externos. En el caso de que queramos integrar datos de una BD, lo más lógico es intentar usar Entity Framework (EF) para facilitar el modelado de operaciones como listar elementos, visualizar elemento, crear elemento, actualizar elemento o borrar elemento. Si os lanzáis a crear un modelo de EF y lo usáis en el modelo de BDC os encontraréis conque al desplegarlo (al contrario de lo que pasa con un modelo de LINQ To SQL) y probarlo el BCS no se puede conectar a la BD porque no encuentra la cadena de conexión correspondiente…pero como casi siempre, todo problema tiene solución:

  • La primera opción, y para hacer pruebas rápidas, pasa por añadir la cadena de conexión al archivo web.config (acordaros de hacer una copia de seguridad antes) de la aplicación web dónde vais a probar el conector de BDC creado:
   1: <connectionStrings>

   2:   <add name="CRM_BDEntities" connectionString="metadata=res://*/ContactosModel.ContactosModel.csdl|res://*/ContactosModel.ContactosModel.ssdl|res://*/ContactosModel.ContactosModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=CRM_BD;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

   3: </connectionStrings>

  • La segunda y mejor opción, aunque hay que tener mucho cuidado, es añadir esta cadena de conexión de forma programática al web.config en el momento de activación de la feature que despliega el modelo. Un ejemplo de esto lo tenéis en este enlace.