c# - mvc - entity framework database first
¿La mejor manera de inicializar un contexto de marco de entidad? (3)
Bueno, la "mejor" manera siempre es subjetiva. Sin embargo, agregar una clase UnitOfWorkScope al proyecto puede simplificar mucho las cosas, es decir, no tiene que pensar demasiado sobre la creación del contexto del objeto o la persistencia de la Unidad de trabajo en la base de datos.
Hay un excelente artículo que explica Cómo crear un alcance de unidad de trabajo .
Cuando se inicializa un contexto de marco de entidad.
Una es inicializar a nivel de clase, como
public class EntityContactManagerRepository
: ContactManager.Models.IContactManagerRepository
{
private ContactManagerDBEntities _entities = new ContactManagerDBEntities();
// Contact methods
public Contact GetContact(int id)
{
return (from c in _entities.ContactSet.Include("Group")
where c.Id == id
select c).FirstOrDefault();
}
}
La otra forma es inicializar en el nivel de método.
public class EntityContactManagerRepository
: ContactManager.Models.IContactManagerRepository
{
// Contact methods
public Contact GetContact(int id)
{
using (var entities = new ContactManagerDBEntities())
return (from c in entities.ContactSet.Include("Group")
where c.Id == id
select c).FirstOrDefault();
}
}
A partir de un fondo Ado.Net, prefiero el último método de inicialización en uno, pero el primero es del ejemplo desarrollado por Stephen Walthe . O otra pregunta, ¿importa?
En términos generales: es contexto por solicitud en ASP.NET y contexto por ventana en WinForms / WPF.
Hay un artículo que explica bastante bien el razonamiento detrás del paradigma de contexto por solicitud: Entidad Marco Objeto Contexto Alcance
Importa, porque el contexto controla la vida útil de los datos de seguimiento de cambios, y también afecta las instancias de objetos que puede vincular cuando edita los objetos, ya que los objetos en dos contextos diferentes no pueden tener una relación entre sí. Me parece que los ejemplos que compartes provienen de una aplicación ASP.NET MVC. En este caso, generalmente utilizo un contexto de entidad por solicitud, ya que las solicitudes son efímeras y, como es común, al actualizar un objeto en una solicitud, tener que buscar otros objetos y crear relaciones entre ellos.
Por otro lado, no desea mantener un contexto de entidad durante mucho tiempo, ya que masticará la memoria a medida que rastrea los cambios en más y más objetos.
Esto puede parecer un argumento para la opción "un contexto por clase", pero realmente no lo es. Es más como un argumento para "un contexto por unidad de trabajo".