Você está na página 1de 4

Entity Framework -> ORM (Object Relational Mapper)

Mapea datos en la DB a objetos en la app


EF provee una clase DbContext que es el portal a la BD
DbContext -> posee varios DbSets que representan a las tablas en la BD
LINQ -> tira query a los DbSets y EF traduce las queries de LINQ a SQL en runtim
e
que abre una coneccin a la BD lee los datos, los mapea a objetos y los ag
rega a DbSets en el DbContext.
*Cuando agregamos/modificamos/eliminamos datos a los DbSets, EF tiene un trace d
e los cambios y cuando le indicamos que persistan los
cambios automticamente genera la sentencia SQL las ejecuta.
2 Workflows:
- Database First
- Code First

Database First vs Code First


======== ===== == ==== =====
Database First -> generar las tablas y hacer que EF genere las domain classes (
modelos)
Code First -> creamos las domain classes y dejamos que EF genere las tablas
en la BD.
- Incremento de productividad.
- Versionado de la BD (con migraciones).
- Integration Test DB.
Code-First Migrations
========== ==========
* Primero en la consola de administrador de paquetes se habilitan las migracione
s.
> enable-migrations
* Esto nos crea una nueva carpeta en la aplicacin "Migrations" donde se v
an a ir guardando las migraciones.
* Para crear una migracin se utiliza el siguiente comando:
> add-migration NombreMigracion
* En IdentityModels.cs -> se agrega los DbSet's en ApplicationDbContext
> public DbSet<Customer> Customers { get; set; }
* Para indicarle a EF que actualice los datos usamos el siguiente comando:
> update-database
Cambiando el Modelo
========= == ======
* Una vez se agregan las nuevas propiedades que tenemos en el domain cla
ss que querramos que se represente en la tabla,
se tiene que agregar tambin las propiedades que querramos que estn como po
r ejemplo las key y las foreign keys.
Primary Key -> Id
Foreign Key -> NombreClaseId
Sembrando Datos en la BD
========= ===== == == ==
* Para ingresar datos en la BD usamos tambin migraciones a travs del coman
do add-migration.
> add-migration PopulateMembershipTypes
* Esto nos crea una clase con el nombre de la migracin generada... donde
tiene dos mtodos con override Up y Down.
Para llenar la tabla quer queremos, usamos el mtodo Sql() donde le indica
mos SQL puro para insertar los datos.
Overriding First Code Conventions
========== ===== ==== ===========
* Por el simple hecho de que en .Net hay convensiones como por ejemplo q
ue un string sea nulleable. Existe la manera de que EF
pase por alto ese tipo de convensin en cuanto a la base de datos.
Por ejemplo: si queremos que no sea nulleable nuestro string en la BD ->
agregamos el atributo ComponentModel.DataAnnotaions:
> [Required]
> [StringLength(255)] -> para agregarla longitud del varchar en
la BD.
Querying Objetos
======== =======
* Para obtener, crear o modificar datos de la base de datos... se necesi
ta realizar una propiedad ApplicationDbContext
para conectarse a la misma y usarla.
> private ApplicationDbContext _context;
** Es un objeto disposable as que se necesita eliminar apropiadamente ove
rrideando el dispose
private ApplicationDbContext _context;
public CustomersController()
{
_context = new ApplicationDbContext();
}
protected override void Dispose(bool disposing)
{
_context.Dispose();
}
** Cuando llamamos a _context.Customers; -> se realiza un ejecucin diferi
da... va a ir queriando a la BD al momento de iterar
en las vistas o solicitar datos en la vista.
-> para poder obtener la lista de Customers en tiempo real de creacin de
la var, se le agrega .ToList():
var customers = _context.Customers.ToList();
Eager Loading
===== =======
Esto pasa cuando hay que informar a EF que tiene que abrir los objetos r
elacionados al objeto en el que se est usando.
Para poder traer los datos de la tabla relacionada al objeto se agrega l
o siguiente:
> var customers = _context.Customers.Include(c => c.MembershipType).ToLi
st();
===============================================================================
CONSTRUYENDO FORMULARIOS
============ ===========

Form Label
==== =====
El nombre de la Label es exactamente igual a la propiedad correspondient
e en la clase.
Para cambiarlo hay dos opciones:
- En la clase agregar un DataAnnotation a la propiedad;
>[Display(Name = "Date of Birth"]
- La otra forma es agregarlo es agregarlo directamente dentro de
l tag Label, pero no se va a actualizar automticamente
si se cambia el nombre de la propiedad.
Drop-Down List
========= ====
* Para generar una lista de select se selecciona el Helper DropDownListF
or y se le pasa como segundo parmetro la clase
SelectList() -> donde se pasan los parmetros:
1 - Lista de elementos
2 - Nombre de la propiedad de la clase de elementos de la lista
que mantiene el valor por cada tem.
3 - Nombre de la propiedad que mantiene el texto de cada tem.
> new SelectList(Model.MemberShipTypes, "Id", "Name")
**Que en s quedara como:
> @Html.DropDownListFor(m => m.Customer.MembershipTypeId, new SelectList(Model.M
emberShipTypes, "Id", "Name"), "Select Membership Type", new { @class = "form-co
ntrol"})

Model Binding
===== =======
* Cuando se genera una solicitud de una pgin, el controlador que es pasad
o por formulario tiene que esperar con el atributo
que indique si la solicitud es GET o POST.
Al asignarle un Modelo como parmetro -> lo que hace es bindear (vincular)
los datos al modelo que se le est pasando directamente.
Guardando Datos
========= =====
* Cuando se requiere guardar datos se tienen que agregar los datos a la
lista DbSet dentro de DbContext, para que virtualmente estn en la misma:
> _context.Customers.Add(customer);
* Luego se tiene que llamar a las sentencias de SQL a travs del mtodo Save
Changes():
> _context.SaveChanges();
Formulario Editar
========== ======
* Al momento de tener que reusar cdigo de Vistas, puede que se requiera u
sar un mismo mtodo que utiliza
"{0: d MM yyyy}"

Você também pode gostar