c# - what - Entity Framework+Repository+Unidad de trabajo
generic repository c# entity framework (2)
Si su proyecto es web, cree un controlador que inicie una transacción en una solicitud y finalícela en el último paso.
Creo que se puede encontrar un ejemplo mucho más simple aquí: https://github.com/ayende/CourseSampleApp También puedes encontrar otras muestras en nhibernate que pueden satisfacer tus necesidades.
Estoy pensando en comenzar un nuevo proyecto usando EF 4 y revisar algunos artículos, encontré algunos artículos sobre EF con el patrón de repositorio y la unidad de trabajo
( http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_15.html y http://blogs.msdn.com/b/adonet/archive/2009/06/16/using) -repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx )
Estoy usando el primero (part1, part2 y part3). Ellos son muy similares.
Soy un novato en este escenario. Estoy confundiendo entre estas dos publicaciones. Creé todo, pero no tengo idea de cómo puedo empezar a usar el contexto y agregarle algunas entidades. Publiqué el segundo enlace porque publiqué una forma de implementarlo. ObjectContext
se deriva de IUnitOfWork
, por lo que estoy confundido para elegir cuál de estos dos es mejor usar.
Tu pregunta no es estúpida Comenzar con UnitOfWork
y los patrones de Repository
toma algo de tiempo.
Primero, para obtener algo de terminología correcta. Un UnitOfWork
encapsula un conjunto de acciones y las agrupa. Por lo tanto, puede, por ejemplo, crear un cliente, un producto y un pedido correspondiente en un grupo lógico.
Un Repository
le proporciona un único punto de acceso a las entidades y la mayoría de las veces tiene algunos métodos específicos para recuperar datos.
Se pueden usar múltiples repositorios en una sola transacción, es por eso que comparten un UnitOfWork
.
En el ejemplo que publicó, los archivos T4 crean algunas interfaces de Repository
. Uno es de solo lectura con métodos para seleccionar entidades, pero el otro Repository
tiene métodos como Add
y Delete
.
Entonces, si desea agregar una entidad, primero debe construir un UnitOfWork
y luego crear una instancia de un Repository
para la entidad con la que ProductRepository
trabajando ( CustomerRepository
o ProductRepository
por ejemplo). Luego puede usar el método Add
para agregar entidades a un Repository
. Cuando haya terminado de trabajar con sus repositorios, UnitOfWork.Commit()
llamar a UnitOfWork.Commit()
para guardar sus cambios en la base de datos.
IUnitOfWork unitOfWork = new EFUnitOfWork();
IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);
Customer c = new Customer();
// init customer
customerRepository.Add(c);
unitOfWork.Commit();
En el ejemplo que publicó, se usa Inyección de dependencias con StructureMap. Este es un tema completamente diferente, pero significa que no se construye el UnitOfWork
y Repository
directamente sino que se ''inyectan'' en su código usando alguna configuración que haya configurado.