Estoy pensando en iniciar un nuevo proyecto usando EF 4 y pasando por algunos artículos de trabajo, me encontré con un artículo sobre EF con el patrón de repositorio y unidad de trabajo (http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx)entidad unidad de marco + repositorio + o pregunta
Al mirar ese artículo, usa ObjectContext como UnitOfWork y lo pasa al Repository.
Mi pregunta es: ¿qué ocurre si tengo 2 ObjectContext que significa que tendré 2 unidades de trabajo, pero realmente quiero que toda la operación en esos 2 contextos sea una sola unidad de trabajo? ¿Es posible este escenario? No quiero llamar a ahorrar en cada contexto, me gustaría que sea transaccional .... sin necesidad de utilizar TransactionScope ...
Por ejemplo, tengo un contexto que gestiona el registro de operaciones y otro contexto que gestiona Pedidos. Digamos que en mi capa de negocios, tengo un método llamado AddOrder(). AddOrder() usará el contexto del pedido para crear un nuevo pedido, pero también usará el contexto del registro de operaciones para crear una nueva entrada del registro de operaciones. Ya que esos son 2 contexto, voy a tener que llamar a ahorrar en el contexto tanto de cometer .... tal vez la única opción es tener sólo un único contexto ....
EDIT: Me refería 2 contexto de diferentes tipos por ejemplo: OperationalLogContext y OrderContext.
Gracias, esto ayuda mucho. Entonces, la única forma es realmente tener solo un contexto ... y si tengo 2 contextos, entonces no tendré más remedio que recurrir a algún mecanismo de transacción, ¿es correcto? – pdiddy
no. Puedes tener tantos como quieras. observe cómo, con la Inyección de Dependencia, dije HttpScopeOrThreadScope? Puede cambiar eso para que sea singleton (mala idea) o el valor predeterminado que es 'nuevo' subir una nueva instancia cada vez que se solicite un objeto.Así que depende de usted :) Si está haciendo la 2da vía (lo cual hice usando un ejemplo de Prueba), entonces sí ... tendrá que actualizar manualmente cada contexto, uno por uno. ej. 'var context1 = new SSC (..); var context 2 = new SSC (...); _or = new OR (context1); _olr = new OLR (context2); 'etc. –
Tuve que actualizar mi respuesta, tenía un error grave. Reemplacé cualquier referencia a una 'nueva EntityConnection (connectionString)' con un plain 'connectionString' porque la conexión no se eliminaba, si el contexto no creaba la' EntityConection' (en lugar de que se pasara uno). Saludos a Ayende Rahien (de Hibernating Rhino) por la solución. –