2010-09-15 35 views
8

Digamos que tengo en mi base de datos múltiples esquemas db, por ejemplo: HumanRessources and Inventory.Entity Framework con múltiples edmx

En cada uno de esos esquemas contiene tablas múltiples. ¿Suele dividir su base de datos en múltiples edmx o, por lo general, simplemente poner todo en un solo edmx?

Estaba pensando en crear un edmx para cada esquema, pero me pregunto cómo impactará esto en un patrón unitario. Al leer algunos artículos, ObjectContext será la unidad de trabajo. Al definir 2 edmx, terminaré con 2 ObjectContext: HumanRessourceContext y InventoryContext, lo que significa que cada uno será una unidad de trabajo. ¿Qué sucede si quiero que todas las modificaciones realizadas a una entidad en el humanressource y una entidad en el contexto de inventario sean ATOMIC, puede lograrse con el patrón de unidad de trabajo?

+0

Véase también mi última pregunta [esquemas múltiples en el marco de la entidad] [1] [1]: http://stackoverflow.com/questions/12052136/how-to-entity-framework-and -múltiples esquemas – MorbidCamel

Respuesta

7

Si bien esto no es una aprobación de dividir la base de datos de esquema en EDMX de, usted puede hacer la actualización atómica utilizando un TransactionScope:

using(TransactionScope trans = new TransactionScope()) 
{ 
    using(HumanResources hr = new HumanResources()) 
    { 
     //... 

     hr.SaveChanges(); 
    } 

    using(Inventory inv = new Inventory()) 
    { 
     //... 

     inv.SaveChanges(); 
    } 

    trans.Complete(); 
} 

Obviamente se puede reorganizar su contexto objetos como usted quiera (si necesita usar ambos al mismo tiempo, por ejemplo) y puede alterar el nivel de aislamiento de la transacción a lo que sea apropiado, pero esto debería darle lo que necesita saber para hacer que sus cambios en la base de datos sean atómicos.

+0

ok gracias, estaba tratando de evitar el workscopio. Así que prácticamente el único camino a seguir es tener un solo edmx que contenga todos los elementos del recurso humano y los elementos del inventario, de esta manera el patrón de unidad de trabajo funcionará bien. – pdiddy

+0

@pdiddy: ¿Por qué intentas evitar TransactionScope? –

+0

Estaba bajo la impresión con el patrón UnitOfWork de que puedo evitar el transactioncope, ya que todo lo hecho en el objeto se enviará en una transacción de signe de todos modos al llamar a savechanges. Entonces comencé a preguntarme si tenía 2 contextos, cómo funcionará el patrón de unidad de trabajo, pero veo que tendré que usar un scopecope para hacer el contexto atómico 2 lo cual tiene sentido. Soy nuevo en este patrón de unidad de trabajo, así que solo trato de entenderlo. – pdiddy

2

Si sus tablas Inventory y HumanResources no tienen ninguna relación entre ellas, dividir las tablas en dos archivos edmx está bien, aunque no sé qué beneficio ofrecería. Si tienen relaciones directas o indirectas, te encontrarás con problemas al tratar de usar esas relaciones. La solución más simple es usar un único EDM.

+1

Era más acerca de la estructura, tenerlo organizado en mi proyecto ... tener todo en un solo edmx, digamos que tengo como 50 tablas ... en un solo edmx ... es muy pesado abrirlo en el diseñador ser confuso porque hay mucho ... pero si me trae problemas, prefiero tener un solo edmx entonces. Gracias – pdiddy

Cuestiones relacionadas