lunes, 8 de junio de 2015

Entity Framework:No aparecen las entidades relacionadas al hacer binding

Hola a todos,

Esto es algo que se puede encontrar cualquiera, y que prefiero dejaros una solución.

Pongamos el caso.
Hacemos un modelo EF (en mi caso EF 6.1.3) con tablas relacionadas.
Creo un formulario donde pongo un BindingSource y su Datasource le añado el tipo de objeto del Entity Framework.
Acto seguido, añado otro BindingSource para gestionar la otra tabla relacionada, añadimos en el datasource el BindingSource primero que hemos puesto, y desplegamos el dataMember para seleccionar la otra tabla relacionada, y sorpresa!!, no nos muestra nada!!!

Bien, si este es vuestro caso, os aporto una posible solución.

Primero de todo, las referencias.
- Añadir en los nombres importados la referencia de System.Collections.ObjectModel.

Y ahora viene los pasos.
El motivo es que los objetos de la tabla relacionada no aparecen es que es posible que no os lo haya puesto el EF como un lista de tipo observable.

Tenéis que abrir el archivo .tt (según el nombre le hayais puesto al EF).
- Buscáis y remplazáis todas las coincidencias de ICollection por ObservableListSource.
- Luego buscais las coincidencias de HashSet. Encontrareis dos, pues bien, modificar la primera (y solo la primera) también por un ObservableListSource.

Una vez guardéis, os regenerará las clases del entity framework y ya os debería aparecer en el bindingSource.datamember disponible para seleccionar.

Esta solución ha sido sacada a partir de la documentación del Entity framework de esta web (con alguna modificación mía):


https://msdn.microsoft.com/en-us/data/jj682076.aspx  

Double-click on the ProductModel.tt file to open it in the Visual Studio editor
  Find and replace the two occurrences of “ICollection” with “ObservableListSource”. These are located at approximately lines 296 and 484.
  Find and replace the first occurrence of “HashSet” with “ObservableListSource”. This occurrence is located at approximately line 50. Do not replace the second occurrence of HashSet found later in the code.
  Save the ProductModel.tt file. This should cause the code for entities to be regenerated. If the code does not regenerate automatically, then right click on ProductModel.tt and choose “Run Custom Tool”.



No hay comentarios:

Publicar un comentario