work what unit pattern generic framework c# entity-framework design-patterns repository unit-of-work

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.