Vous êtes sur la page 1sur 22

ObjectContext

Entity Framework (3 de N): ObjectContext y ObjectSet


Vamos a por el tercer post de EF, en l, voy a empezar a explicar un poco el cdigo que nos genera VS. En el momento en el que generamos un EDMX, y agregamos nuestras Tablas de Datos que pasan a ser entidades del mdelo, VS genera el fichero XXX.Designer.VB. Este fichero va a contener, toda la informacin relativa al contexto de manejo de los datos, las entidades, y las asociaciones existentes entre las distintas entidades. Para comenzar vamos a ver el Contexto: DEFINICION ObjectContext es la clase encargada de manejar los datos de la BD como si fueran entidades definidas en el modelo. VS va a generar una propiedad de solo lectura por cada una de las entidades existentes en nuestro mdelo, devolvindolas como un ObjectSet de la entidad deseada. Qu es un ObjectSet? Es la clase que nos permite manejar el conjunto de Entidades por un tipo dado. Herada de la clase genericaObjectQuery, la cual genera una coleccin de resultados a travs de una consulta. La consulta y la conexin van a venir indicados a travs del ObjectContext. Adems tambin implementa las siguientes Interfaces: - IObjectSet (Of Entity): genera las cabeceras de los mtodos que nos permiten modificar el conjunto de datos de la entidad. - IQueryAble (Of Entity): nos va a facilitar la funcionalidad para poder consultar los datos del objeto. - IEnumerable (Of Entity): nos va a permitir generar un enumerador de los datos de la entidad. - IQueryAble: nos va a facilitar la funcionalidad para poder consultar los datos del objeto. - IEnumerable): nos va a permitir generar un enumerador de los datos de la entidad. Con lo indicado anteriormente, podemos decir, que un ObjectSet de una Entidad nos va a devolver todos los registros de una tabla, nos va a permitir agregar, modificar o borrar los datos de un registro, nos va a permitir hacer filtros, y listarlos. Adems de los distintos ObjectSet de las Entidades, VS tambin va a generar un mtodo para cada una de las entidades que se va a encargar de Agregar un nuevo objeto que enviaremos como parmetro a la Entidad indicada. En el prximo post, nos meteremos con las propias Entidades generadas por VS. Saludos

ADO.NET Entity Framework: LINQ To Entities, Entity SQL y Entity Services (I)
5

Para complementar la serie de post que sobre LINQ ToEntities y Visual Basic 2008 ha iniciado Jorge Serrano, en este primer post sobre ADO.NET Entity Framework os dar el punto de vista anlogo a lo que Jorge ha explicado pero aplicado a la nueva versin de C # que aparece como una de las grandes novedades de Visual Studio 2008: C # 3.0. Antes de entrar en materia, la primera pregunta que se nos puede venir para los profanos en la materia es Qu es ADo.NET Entity Framework? Como se describe en este artculo, una de las metas principales de la nueva versin de ADO.NET es elevar el nivel de abstraccin de la programacin contra fuentes de datos a travs de la eliminacin del "vaco" existente entre los modelos de datos y los lenguajes de programacin. Y Cmo es posible esto? A travs de dos innovaciones claves de las que ya se ha hablado mucho en Geek.Ms: LINQ y ADO.NET Entity Framework. Precisamente ste ltimo (Entity Framework) es un nuevo componente que aparece en familia de tecnologas ADO.NET, que habilitar acceso a datos mediante LINQ utilizando: LINQ To SQL, LINQ ToDataSet y/o LINQ ToEntities. Si tuvisemos que resumir las caractersticas de este Entity Framework, sin duda destacaramos los siguientes puntos:
Se trata de un Framework que permite manipular y acceder a los datos como clases .NET. Permite realizar un modelado de datos a nivel conceptual, es decir, habilita la separacin de las aplicaciones y los esquemas de BD. Permite una mejor interactuacin de los datos con el entorno .NET: Se interacta con objetos, frente a hacerlo con filas y columnas. Proporciona una serie de servicios en tiempo de ejecucin y en tiempo de diseo que permite a los desarrolladores describir los datos de la aplicacin e interactuar con ellos a un nivel de abstraccin conceptual claramente alineado con el concepto de implementacin de aplicaciones de negocio, y que adems ayuda a aislar la aplicacin respecto a los esquemas de base de datos (BD) sobre los que se ha definido. Como coment Jorge en su post, se apoya en LINQ para definir las consultas a objetos del esquema EDM (Entity Data Model). Supone una capa ms, pero independiza las aplicaciones de el esquema de BD subyacente, independientemente de la tecnologa de BD que se est utilizando.

En qu se traduce esta independencia con el esquema de BD y la tecnologa de BD? Pues bsicamente en una arquitectura dividida en dos partes diferenciadas, Modelo de datos y Modelo Conceptual (EDM), en la que el paso de una parte a otra se realiza a travs del correspondiente mapeo. Para realizar este mapeo se utilizan proveedores .NET que permiten interactuar con los datos en cada uno de las partes:

La idea es que el provider .NET de la capa de datos se encarga de traducir las operaciones de datos realizadas en la capa conceptual a un lenguaje entendible por la BD (lgicamente T-SQL). Por su parte, el proveedor .NET (EntitySQL) de la capa conceptual traduce las consultas LINQ realizadas en las aplicaciones a las correspondientes instrucciones que interacten con el modelo conceptual definido mediante el proceso de mapeo.

Una vez repasadas las principales ideas y conceptos que hay bajo ADO.NET Entity Framework, vamos a ver en la prctica en que consiste trabajar en un nivel de abstraccin superior. Los requisitos para poder probar ADO.NET Entity Framework ya los comentamos en este post. Definiendo el EDM Cmo coment Jorge en su post, el primer paso para trabajar con ADO.NET Entity Framework pasa por crear un modelo de entidades a partir de un cierto esquema de BD. Para ello aadimos al proyecto un elemento de tipo ADO.NET Entity Data Model con lo que se iniciar un asistente que nos guiar en la creacin del modelo a partir de:
Especificar la opcin de generacin del EDM (a partir de una BD o bien un EDM vaco. Especificar la cadena de conexin a la BD (que como siempre, puede ser un archivo fsico o bien una instancia de SQL Server). Especificar que objetos de la BD queremos que formen de nuestro EDM (en este caso, tablas y procedimientos almacenados).

Tras pulsar Finish en la ltima pantalla del asistente, ya tendremos creado el modelo de entidades que en esencia es un fichero .edmx que contiene toda la definicin del modelo. Si inspeccionamos el modeloveremos:
Se han generado tantas entidades como tablas de la BD relacional. Al seleccionar cada entidad, podremos ver los detalles de la misma en cuanto a miembros y la correspondencia de los campos de la entidad con sus equivalentes en la tabla de la BD. El explorador del modelo nos permitir ir navegando por los componentes del mismo: entidades, asociaciones entre entidades, funciones, etc. Finalmente, para tener una idea del cdigo generado por el asistente, basta con que nos vayamos al ClassViewer o al Object Browser e inspeccionemos los distintos elementos generados.

Consultando Entidades Como ya coment Jorge, una de las formas que tenemos para definir consultas contra el EDM es a travs de LINQ ToEntities que nos dota de toda la potencia y capacidades de LINQ sobre ADO.NET Entity Framework, as como funcionalidad de ORM (ObjectRelationalModel), de manera que los desarrolladores pueden materializar sus entidades en tipos del CLR y programar de forma ms sencilla contra el EDM y la base de datos. Lo primero que tenemos que hacer es aadir a nuestra aplicacin las sentencias using necesarias:

using System.Data.EntityClient; using System.Data.Common; using System.Data;

El siguiente paso consiste en instanciar el modelo EDM creado y definir la correspondiente consulta LINQ. Porejemplo:
//Instancia del modelo de entidades creado ClientesModel.Entidades_BD_ClientesModeloClientes= new ClientesModel.Entidades_BD_Clientes(); //Consulta de entidades!

var clientes = (from c in ModeloClientes.Md_Clientes from v in ModeloClientes.Md_Vehiculos where c.ID_Cliente==v.ID_Cliente select c).Distinct(); Console.WriteLine("***********Consulta LINQ To Entities***********"); foreach (var c in clientes) { Console.WriteLine("NIF={0}, Direccion={1}", c.ID_Cliente, c.DireccionCliente + " " + c.CiudadCliente); } Console.ReadLine();

Como vemos, lo primero que hacemos es crear un objeto denominado ClientesModel que es una instacia de ClientesModel.Entidades_BD_Clientes(). La primera parte se corresponde a nuestro EDM, y la segunda (Entidades_BD_Clientes) es un objeto que ha sido aadida al modelo en el momento de su creacin y que hereda de ObjectContext, clase que se encarga de mantener la conexin e informacin de los metadatos necesaria para leer, escribir, actualizar o borrar entidades en la BD. Adems, tambin referencia la clase ObjectStateManager que se encarga de aspectos relacionados con el tracking de cambios y la resolucin de identidades...esto ya lo vimos con LINQ To SQL: si una consulta nos devuelve un objeto del modelo, este es persistido a travs de otras consultas mientras que exista el objeto de contexto correspondiente. Sin ms, la salida por pantalla que se obtiene de la consulta anterior es:

Operaciones de actualizacin, inserccin y borrado de entidades Como ocurra con LINQ To SQL, ADO.NET Entity Framework a travs de LINQ ToEntities nos permite realizar de manera sencilla operaciones de actualizacin, insercin o borrado a travs de la interactuacin con las entidades del modelo. Para actualizar una entidad, basta con crear una instancia de la misma a partir de realizar una consulta a la BD de los resultados a actualizar (consulta con C # plano o mediante queryexpression):
//Actualizacin Console.WriteLine("***********Actualizando las Entidades***********"); ClientesModel.Md_ClientesClienteToUpdate = ModeloClientes.Md_Clientes.First( c =>c.ID_Cliente == "71505286B"); ClienteToUpdate.CiudadCliente="Torrelavega"; ModeloClientes.SaveChanges(); foreach (var c in clientes) { Console.WriteLine("NIF={0}, Direccion={1}", c.ID_Cliente, c.DireccionCliente + " " + c.CiudadCliente); }

Como vemos, la clave para llevar los datos a la BD est en el mtodo SaveChanges(). Por otro lado, tal y como sucede con el caso de la primera consulta, gracias a que el objeto ObjectStateManager de encarga del tracking de los datos, los antiguos y nuevos valores se mantienen en el contexto de la aplicacin y los cambios se pueden guardar en la BD. La salida por pantalla de la operacin de actualizacin es:

Para aadir una entidad nueva basta con crear una nueva instancia de la entidad deseada, especificar sus propiedades y aadirla al modelo:
//Inserccin Console.ReadLine(); Console.WriteLine("***********Aadiendo nuevas Entidades***********"); ClientesModel.Md_ClientesClienteToAdd = new ClientesModel.Md_Clientes(); ClienteToAdd.ID_Cliente = "72678934C"; ClienteToAdd.DireccionCliente = "C/ Ordoo II"; ClienteToAdd.CiudadCliente = "Len"; ModeloClientes.AddToMd_Clientes(ClienteToAdd); ModeloClientes.SaveChanges(); varAllClients = (from c in ModeloClientes.Md_Clientes select c); foreach (var c in AllClients) { Console.WriteLine("NIF={0}, Direccion={1}", c.ID_Cliente, c.DireccionCliente + " " + c.CiudadCliente); } Console.ReadLine();

En este caso la clave para preservar los datos en la BD est en el mtodo AddToMd_Clientes() que es generado automticamente en el modelo de creacin del EDM y que recibe un objeto del tipo de la entidada a aadir, as cmo en el mtodo SaveChanges(). La correspondientesalidaporpantallaes:

Para realizar el borrado de una entidad, se sigue la misma filosofa que para el caso de la actualizacin e inserccin, slo que en este caso se utiliza el mtodo DeleteObject() y a continuacin SaveChanges() para poder llevar los datos a la BD:
//Borrado Console.WriteLine("***********Borrado de clientes***********"); ClientesModel.Md_ClientesClienteToDelete = ModeloClientes.Md_Clientes.First( c =>c.ID_Cliente == "72678934C"); ModeloClientes.DeleteObject(ClienteToDelete); ModeloClientes.SaveChanges(); Console.WriteLine("Clientes despus de borrar"); foreach (var c in AllClients) { Console.WriteLine("NIF={0}, Direccion={1}", c.ID_Cliente, c.DireccionCliente + " " + c.CiudadCliente); } Console.ReadLine();

La correspondiente salida por pantalla es:

Y hasta aqu este primer post sobre ADO.NET Entity Framework en la prctica. En el prximo post os introducir el concepto de Entity SQL y EntityServices, y os mostrar una interesante herramienta que tenemos disponible para facilitar la construccin de consultas contra un EDM. Esperoque el post oshayaresultadointeresante

Cmo manejar el ciclo de vida del DataContext/ObjectContext en ASP.NET?


Si ests trabajando en ASP.NET y LINQ2SQL o ADO.NET EF, te habrs preguntado cual es la mejor estrategia o solucin para manejar el DataContext o el ObjectContext. Intentar responder esta pregunta planteando varias alternativas que

he conocido, pero vers que cada una tiene sus ventajas y desventajas, y la eleccin depender del escenario donde necesites aplicarlo. Por cuestiones de simplicidad, a continuacin hago referencia al ObjectContext de ADO.NET EF, pero la problemtica es la misma con el DataContext de LINQ to SQL.
1. Un contexto por Session

A ms de uno se le habr ocurrido implementar alguna especie de Singleton y almacenar el ObjectContext en el objeto Session de ASP.NET. Ventajas Existe un nico contexto para toda la sesin del usuario Todas las operaciones se realizan usando ese nico contexto por usuario. No deberan aparecer los problemas de que no se puede actualizar una entidad porque est asociada a otro contexto. Las opciones como ObjectTrackingEnabled o DeferredLoadingEnabled se aplicaran para todas las operaciones. El contexto puede crecer mucho y afectar la escalabilidad de la aplicacin.

Desventajas

2. Un contexto por Request

La idea aqu es similar a la anterior, pero en lugar de almacenar el contexto en el objeto Session, lo guardamos en la coleccin HttpContext.Items. Esta coleccin se crea para cada Request y solo existe durante la ejecucin de la solicitud. Ventajas

El contexto solo vive durante el hilo de ejecucin de cada Request. Las operaciones de diferentes clases de acceso a datos pueden compartir el mismo contexto. La escalabilidad de la aplicacin no debera verse afectada, pues el contexto se destruye al finalizar el Request. Las opciones como ObjectTrackingEnabled o DeferredLoadingEnabled siguen afectando a todas las operaciones. Existe una sobrecarga de crear el contexto con cada Request. Aunque esa sobrecarga suele ser despreciable.

Desventajas

3. Un contexto por instancia de acceso a datos

En lugar de guardar el contexto en la sesin o en el Thread del Request, lo creamos al instanciar la clase de acceso a datos. Por ejemplo, en el mtodo constructor de la clase. Ventajas El contexto tiene el mismo ciclo de vida que la clase de acceso datos. Las operaciones de la misma clase de acceso a datos pueden compartir el contexto.

La escalabilidad de la aplicacin no debera verse afectada, el contexto se destruye cuando se destruye la clase. Las opciones como ObjectTrackingEnabled o DeferredLoadingEnabled siguen afectando a todas las operaciones en la misma clase. Otras clases de acceso a datos no pueden compartir el mismo contexto. Existe una sobrecarga de crear el contexto con cada instancia. Esta sobrecarga puede afectar la performance si muchas instancias de acceso a datos se crean con cada request.

Desventajas

4. Un contexto por operacin de acceso a datos

Esta sera la forma ms atmica de manejar el contexto. Cada operacin de acceso a datos crea el contexto, lo usa y lo libera. Ventajas

El contexto tiene un ciclo de vida mnimo. La escalabilidad de la aplicacin no debera verse afectada, el contexto se destruye cuando finaliza el mtodo. Las opciones como ObjectTrackingEnabled o DeferredLoadingEnabled solo afectan a todas las operaciones encerradas por el mtodo. Otros mtodos o clases de acceso a datos no pueden compartir el mismo contexto.

Desventajas

Estoy seguro que podemos encontrar otras alternativas o variantes. Aunque no he encontrado ninguna 100% beneficiosa. De todas las variantes enumeradas aqu, en mis proyectos suelo utilizar la variante 2 (Un contexto por request) o la 3 (Un contexto por instancia de acceso a datos). Y hasta el momento no he tenido problemas significativos. Si tienes una estrategia mejor o ms recomendable para manejar el contexto de datos de LINQ2SQL o ADO.NET EF, no dudes en compartirla. En un futuro post, intentar poner algunos ejemplos de cdigo sobre cmo gestiono el contexto de datos en mis proyectos

El pasado 18 de enero tuve el placer de presentar mi primer webcast de introduccin a Entity Framework organizado por el grupo de usuarios UOC DotNetClub. La experiencia fue fantstica, con una gran asistencia y participacin, as que quiero agradecer a Jess Bosch que lo hiciese posible y a todos lo que asistieron por aguantarme la charla. Al final del webcast se hicieron bastantes preguntas y algunas no las pude contestar en el momento, as que he hecho una recopilacin de las que he credo ms interesantes. He intentado responder de una forma breve y he aadido enlaces en algunas respuestas para ampliar informacin. Podis ver la grabacin del webcast en la misma direccin de registro y la presentacin que utilic se puede descargar desde SlideShare. Roberto: Cmo logramos que los ndices clster se creen en un campo especfico, diferente al ID?

El asistente de generacin de base de datos genera un ndice clster en las claves primarias (Primary Key), y un ndice no clster en las claves forneas (ForeignKeys). De momento, no es posible definir ningn ndice explcitamente en el EDM. Ms informacin:Reglas de generacin de bases de datos (Asistente para generar base de datos) Jimmy: Si deseo utilizar Entity Framework en un servicio ASP.NET, necesito algn requerimiento adicional para implementarlo en el servidor? No se necesita ningn componente adicional para utilizar Entity Framework en un servicio, pero hay que tener en cuenta que en escenarios donde no est disponible el contexto de objetos, como puede ser el caso de los servicios web, puede ser necesario implementar soluciones para realizar el seguimiento de cambios de las entidades. Ms informacin:Crear aplicaciones de n niveles (Entity Framework) JBosch: El ObjectContext, cmo se mantendra en una aplicacin ASP.NET? El ObjectContext no perdura entre postbacks en una aplicacin ASP.NET y esto impide realizar

realizar el seguimiento de cambios de las entidades. Sin embargo, disponemos del control EntityDataSource que nos puede ser de ayuda en aplicaciones pequeas, donde no hay separacin de la UI de la lgica de negocio o de acceso a datos. En aplicaciones de n niveles las self-tracking entities ayudan a realizar el seguimiento de cambios, y los mtodos ApplyCurrentValues o ApplyOriginalValues del ObjectContext se pueden utilizar para comparar una entidad conectada al contexto con otra desconectada. Ms informacin:Asociar y desasociar objetos (Entity Framework) Emili: Se pueden crear entidades desde el diseador con claves compuestas? Sera slo con tipos complejos? Solo se puede definir una clave a partir de una o varias propiedades escalares, no se puede definir una propiedad de tipo complejo como clave de una entidad. Ms informacin:Trabajar con claves de entidad (Entity Framework). Carlos Gonzlez: Qu motores de datos se pueden utilizar actualmente con EF? Soporta algn SGBD que no sea

SQLServer? Entity Framework utiliza proveedores ADO.NET para comunicarse con la base de datos. Actualmente hay varios proveedores de terceros para acceder a bases de datos Oracle, DB2, MySQL, etc. Puedes ver una lista de todos los proveedores disponibles aqu: ADO.NET Data Providers Rubn Lpez: En caso de mapear dos tablas a una entidad, cmo funcionan los updates? En el cdigo de nuestra aplicacin, actualizamos la entidad sin preocuparnos por el nmero de tablas con las que est mapeada y Entity Framework genera las consultas necesarias para actualizar todas las tablas. En el caso de que el mapeo fuese contra dos tablas, Entity Framework generara dos sentencias UPDATE. Ms informacin: Tutorial: Asignar una entidad a varias tablas (Herramientas de Entity Data Model). Jonathan: Crear una entidad como has creado Student, crea por detrs un INSERT parametrizado? S, Entity Framework siempre intentar crear sentencias SQL parametrizadas.

Gabriel Gonzalez: Cmo trabaja EF en una aplicacin multicapas, seria utilizando los Self-Tracking? Y si es as, cmo los puedo utilizar? Efectivamente, en la mayora de aplicaciones de n niveles, en los que no tenemos disponible el contexto de los objetos, podemos hacer uso de las entidades self-tracking para realizar el seguimiento de cambios. Ms informacin:Trabajar con entidades de seguimiento propio (Entity Framework) Carlos Gonzlez: Una entidad Entity Framework, entiendo que no debera ser expuesta en un servicio web por motivos de serializacin, lo normal sera crear DTO, no es as? Aunque depende la interoperabilidad que se requiera, creo que DTO debera ser la ltima opcin a considerar ya que en Entity Framework 4 disponemos de las clases selftracking entities que simplifica la creacin de aplicaciones n-tier, y nos evita el tener que construir una nueva capa. Ms informacin:Creacin de aplicaciones de N niveles con EF4

JFrancisco Ibarra: Conozco LINQ, y despus de ver algunas demos que has hecho, mi pregunta es: por qu usar Entity SQL cuando puedo usar LINQ para llegar a las entidades? Entity SQL es til si necesitamos crear consultas dinmicamente en tiempo de ejecucin. Otra ventaja es que no existen diferencias en la sintaxis de las consultas entre C# y VB.NET, adems Entity SQL puede ser ms fcil de aprender si dominas T-SQL. Ms informacin:Consultar un modelo conceptual (Entity Framework). Virgili: Ante un nuevo proyecto inminente (no muy grande en VS2010 y SQL Server y sin experiencia previa en Entity Framework) vale la pena el esfuerzo de aprendizaje e implementarlo en EF4 o cree que es mejor utilizar LINQ to SQL y entrar poco a poco en EF4? Aconsejo utilizar Entity Framework en nuevos proyectos, pero naturalmente depende del proyecto y de las horas que dispongas para formacin. Quizs un proyecto no muy complejo es el ideal para iniciarse con Entity

Framework. Adems Entity Framework 4 es la solucin recomendada por Microsoft para acceso a datos en escenarios relacionales. Msinformacin:Update on LINQ to SQL and LINQ to Entities Roadmap Carlos Gonzlez: Podras enumerar una serie de ventajas de Entity Framework con respecto a otros ORM como NHibernate, o incluso LINQ to SQL? No conozco NHibernate, as que lo que mejor puedo hacer es remitir a un excelente post de Alberto Daz: EF vs NHibernate? Esa es la pregunta?. Y entre LINQ to SQL o Entity Framework, creo que se responde con la anterior pregunta. Juan: Como podemos cambiar en tiempo de ejecucin el origen de los datos? Por ejemplo: si nuestro Datamodel representa cada uno de nuestros clientes pero cada cliente tiene su propia base de datos. Entonces cuando autentifique el cliente se asigna dinmicamente el modelo a su base de datos. Se puede hacer una clase esttica con un EntityConnectionStringBuilder pero al ser esttica tiene que estar definida desde el

inicio y no asigna la base de datos de cada cliente. Qu aconsejas para solucionar un caso as? Aunque no lo he probado, parece que la solucin pasa por crear la cadena de conexin y pasarla al instanciar el contexto. El cdigo est extrado de este hilo de los foros MSDN. SqlConnectionStringBuildersqlBuilder = new SqlConnectionStringBuilder(); sqlBuilder.DataSource = @"Server1\MySERVER"; sqlBuilder.InitialCatalog = "MyNewDatabase"; sqlBuilder.IntegratedSecurity = true; sqlBuilder.MultipleActiveResultSets = true; EntityConnectionStringBuilderentityBuilder = new EntityConnectionStringBuilder(); entityBuilder.Provider = "System.Data.SqlClient"; entityBuilder.ProviderConnectionString = sqlBuilder.ToString(); entityBuilder.Metadata = @"res://*/Model1.csdl|res://*/Model1.ssdl| res://*/Model1.msl";

EntityConnection conn = new EntityConnection(entityBuilder.ToString()); MyNewDatabaseEntities context = new MyNewDatabaseEntities(conn); MarcLafita: Desde dnde podemos descargar la generacin de codigo ADO.NET POCO? Tengo que descargar algn CTP? No hace falta descargar la CTP, las plantillas de generacin de las clases POCO estn disponibles para descarga en la Galera de Visual Studio. Estn disponibles las plantillas en C# y VB.NET y tambin hay unas plantillas personalizadas para proyectos de Sitio Web. Estos son los enlaces a cada una de ellas: ADO.NET C# POCO EntityGenerator ADO.NET C# WebSite POCO EntityGenerator ADO.NET VB POCO EntityGenerator ADO.NET VB WebSite POCO EntityGenerator En el blog del equipo de ADO.NET podis encontrar un tutorial para utilizar estas

plantillas: Walkthrough: POCO TemplatefortheEntity Framework. David: Se puede utilizar Entity Framework con el Visual Studio Express, o necesitamos la versin completa de Visual Studio 2010? S se puede, Visual Studio 2010 Express tiene soporte completo para Entity Framework. Roberto: Se puede asignar a una propiedad de una Entidad los tipos Filestream y HierarchyID nuevos en SQL? Propiamente dicho, Filestream no es un tipo de dato, podramos decir que es un atributo que aplicamos a un campo varbinary(max). Entity Framework representa este tipo de campo como un campo de tipo byte[] y podemos acceder sin problema a su contenido. Sin embargo, Entity Framework no soporta el tipo HierarchyID, aunque existe una solucin temporal hasta que haya soporte oficial: Howto use HierarchyIDin LinqToSQLorEntity-Framework // MSSQL Server 2008. Pedro Lus: Podramos sustituir la entidad de negocio por Entity Framework? S, podemos extender los objetos de entidades

para que contengan el comportamiento necesario de nuestra aplicacin, o podemos crear nuestros objetos de negocio a partir de las entidades y almacenar la lgica en esos objetos de negocio. Ms informacin:Implementar lgica de negocios (escenarios de Entity Framework) Lus: Cmo trabajara con Entity Framework si quisiera utilizar el patrn MVC? En MVC, el modelo debe contener toda la lgica de negocio de la aplicacin, la lgica de validacin y la lgica de acceso a bases de datos. En un proyecto ASP.NET MVC, deberamos crear el Entity Data Model en la carpeta Models. En este tutorial, se muestra como utilizar Entity Framework en una aplicacin ASP.NET MVC en la que se realizan operaciones CRUD. Jorge: Futuro de Entity Framework? Lo ms cercano en el tiempo es la liberacin en febrero o en marzo de la versin con soporte completo de Code-First. Adems en el PDC se anunciaron varias caractersticas en las que se est trabajando, entre las que se incluyen:

soporte para Enums, Spatial, funciones con valores de tabla y claves alternativas. Tambin se anunciaron mejoras en el diseador de entidades que permitirn tener mltiples diagramas por modelo, as como mejoras en la generacin de SQL, en las consultas LINQ y en la migracin y despliegue. Msinformacin:PDC 2010 Code First Development with Entity Framework
[EF + Oracle] Object Context Prologo

Continuando con la serie de Entity Framework (I y II) en este captulo vamos a ver que es el ObjectContext.
Qu es ObjectContext?

Es la clase encargada de la gestin de la conexin con la Base de Datos y la gestin de las distintas Entidades de nuestro Modelo. A la hora de generar el modelo de EF, ya explique, Visual Studio genera una clase para cada Entidad. Adems de las Entidades, genera un objeto de Contexto. Esta clase hereda de la Clase ObjectContext, la cual nos provee de lo siguiente:
Una conexin con la Base de Datos. Mtodos para aadir, modificar y borrar datos de la Base de Datos. Conjuntos de las distintas entidades de nuestro modelo. Estado de los registros cacheados (o Entidades con cambios pendientes)

Esta clase va a contar con una funcin, para cada entidad, del tipo AddTo{ENTIDAD} ({Tipo_Entidad} valor), la cual va a permitir agregar el parmetro valor al conjunto (Object Set) de la Entidad indicada por el mtodo. Por otro lado, va a contar una propiedad, para cada entidad, del tipo ObjectSet<TEntity> Entidad que va a almacenar el conjunto de datos de la entidad. Est propiedad se va a rellenar a travs de la funcin: CreateObjectSet<TEntity> de la clase base (ObjectContext). Qu es un ObjectSet?(Datos sacados de mi antiguo Blog) Es la clase que nos permite manejar el conjunto de Entidades por un tipo dado. Hereda de la clase genrica ObjectQuery, la cual genera una coleccin de resultados a travs de una consulta. La consulta y la conexin van a venir indicados a travs del

ObjectContext. Ademstambinimplementalassiguientes Interfaces:


ObjectQuery<TEntity>: genera una coleccin de resultados a travs de una consulta. La consulta y la conexin van a venir indicados a travs del ObjectContext. IObjectSet<TEntity>: genera las cabeceras de los mtodos que nos permiten modificar el conjunto de datos de la entidad. IQueryAble<TEntity>: nos va a facilitar la funcionalidad para poder consultar los datos del objeto. IEnumerable<TEntity>: nos va a permitir generar un enumerador de los datos de la entidad. IQueryAble: nos va a facilitar la funcionalidad para poder consultar los datos del objeto. IEnumerable: nos va a permitir generar un enumerador de los datos de la entidad.

Con lo indicado anteriormente, podemos decir, que un ObjectSet de una Entidad nos va a devolver todos los registros de una tabla, nos va a permitir agregar, modificar o borrar los datos de un registro, nos va a permitir hacer filtros, y listarlos. Las consultas de datos las veremos en prximos captulos. Una propiedad importante del Contexto es LazyLoadingEnabled. Esta propiedad, de tipo booleana, permite indicar si la carga de los datos se realiza de forma diferida o no. Qu significa esto?, que el objeto no se crea y consulta hasta que no es necesario.
Conclusiones:

Con este post hemos visto que es el contexto generado por VS, algunas de sus caractersticas y donde vemos los datos de las entidades. En los prximos episodios veremos, como consultar los ObjectSets, y como realizar operaciones CRUD.

Vous aimerez peut-être aussi