2012-01-04 20 views
15

Estoy pensando en iniciar un nuevo proyecto usando EF 4 y pasando por algunos artículos, he encontrado algunos artículos acerca de EF con el modelo de repositorio y unidad de trabajoEntity Framework + repositorio + 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. El ObjectContext se deriva de IUnitOfWork, por lo que estoy confundido para elegir cuál de estos dos es mejor usar.

Respuesta

1

Si su proyecto es web, cree un controlador que inicie una transacción en una solicitud y termínela en el último paso.

Creo que un ejemplo mucho más simple se puede encontrar aquí: https://github.com/ayende/CourseSampleApp También puede encontrar otras muestras en nhibernate que pueden satisfacer sus necesidades.

32

¡Su pregunta no es estúpida! Comenzar con UnitOfWork y los patrones Repository lleva algo de tiempo.

Primero, para obtener algo de terminología correcta. A 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.

A Repository le brinda 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 varios repositorios en una sola transacción, es por eso que comparten un UnitOfWork.

En el ejemplo que publicó, los archivos T4 crean algunas interfaces Repository. Uno es de solo lectura con métodos para seleccionar entidades, pero el otro Repository tiene métodos como Add y Delete.

Así que si desea agregar una entidad, es necesario construir primero una y luego UnitOfWork instancias de un Repository para la entidad escriba su trabajo con (CustomerRepository o ProductRepository por ejemplo). Luego puede usar el método Add para agregar entidades a un Repository. Cuando termine de trabajar con sus repositorios, debe llamar al 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 denegación con StructureMap. Este es un tema completamente diferente, pero significa que no construye el UnitOfWork y Repository directamente sino que se 'inyectan' en su código usando alguna configuración que haya configurado.

+1

He estado trabajando en mi propio patrón C# Repo/Unidad de trabajo por un tiempo y siempre me he preguntado si era correcto. Así es exactamente como lo hice usando Ninject inyectando el uow y repositorios en controladores mvc. Mi unidad de trabajo contiene una copia de la clase DbContext que se comparte con los repos. Pensé que lo explicaste bien :-) –

Cuestiones relacionadas