ADO.NET Entity Framework en una Aplicación Distribuida y Conceptos de Arquitectura Útiles.
Linq To Objects
/////////////////////////////////////////
Product product = new ProductLogic.GetProductById(3);
Console.Write(product.Category.CategoryName);
///////////////////////////////////////////
Pues bien, cierto es que se puede manipular el código generado por diversas herramientas (como la ahora "ya no soportada por Microsoft" Repository Factory ), pero ésto se convertía a veces en algo tedioso. Cierto es también que esquemas como el de Linq to SQL, también crea un modelo de objetos bastante pulcro y entendible, pero lo interesante del ADO.NET Entity Framework (a la fecha 18 de Marzo del 2008 en Beta 3), es que supone la creación de una capa más, que va más allá de mapear una base de datos, sino de verdaderamente inferir las relaciones entre objetos y crear un modelo bastante más complejo de aquellos a los que las habituales herramientas de generación de código nos tienen habituados. Por ejemplo, una entidad puede estar representada en una base de datos en 2 tablas, pero en el modelo de objetos en una sola clase. Cosas como esa son ahora un "poco más" posibles con ADO.NET Entity Framework.
1. Creamos primero un proyecto de Aplicación de Windows en Visual Studio 2008, y le agregamos un nuevo elemento, seleccionamos ADO.NET Entity Data Model, yo le he puesto al modelo "Northwind":
Una vez que tengamos el modelo agregado, aparecerá un asistente para configurar el modelo (imagino que estos pasos ya los deben haber visto en el ejemplo de Jorge, así que los omitiré). Finalmente tenemos un modelo de objetos que se verá algo así (yo he elegido todas las tablas y he puesto por Entity Container Name al modelo el nombre NorthwindEntities):
NorthwindEntities db = new NorthwindEntities(); //Instancio el contexto del modelo
- Interfaz de Usuario (TestLinq)
- Interfaz Servicio WCF (Northwind.Services)
- Implementación de Servicio WCF (Northwind.ServiceImplementation)
- DataContracts de WCF (Northwind.DataContracts)
- Lógica de Negocio (Northwind.BusinessLogic)
- Entidades de Negocio (Northwind **)
- Acceso a Datos (Northwind **)
- Base de Datos (Base de Datos Northwind en Motor de SQLEXPRESS)
namespace Northwind.BusinessLogic
{
///
/// Represents a Business Action for Getting all the Categories.
///
public class GetAllCategoriesAction
{
public List<Categories> Execute()
{
NorthwindEntities db = new NorthwindEntities();
List<Categories> categoryList = db.Categories.ToList();
return categoryList;
}
}
}
Lo que el método hace es simplemente instanciar el ObjectContext NorthwindEntities y devolver la propiedad Categories, que nos devolverá una instancia de ObjectQuery<Categories>. En mi caso para simplificar el modelo convierto el ObjectQuery<Categories> en un List<Categories> con el método ToList(). Categories es el nombre de la entidad generada en el modelo Northwind.edmx a partir de la base de datos Northwind. Hasta este punto no hemos tocado la tecnología WCF y sin embargo ya contamos con una acción de negocio (regla de negocio si quieres llamarle así), y es así como debería ser, vamos bien.
[ServiceContract]
public interface INorthwindService
{
[OperationContract]
List
public class NorthwindService : INorthwindService
{
public List
{
namespace Northwind.DataContracts
{
///
///
[DataContract]
public class Category
{
[DataMember]
public int CategoryId { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public byte[] Picture { get; set; }
}
}
Chispas!..hora de partir!..prometo seguir escribiendo!!!...jeje :D
Labels: Javier Carrillo ADO NET Entity Framework Linq Arquitectura WCF Servicios
