2010-09-15 21 views
8

Lassen Sie uns sagen, ich habe in meiner Datenbank mehrere db-Schema zum Beispiel: HumanRessources und Inventar.Entity Framework mit mehreren edmx

In jedem dieser Schemata enthält mehrere Tabellen. Teilen Sie Ihre DB in der Regel in mehrere Edmx oder in der Regel nur alles in eine einzige edmx?

Ich dachte über das Erstellen eines edmx für jedes Schema nach, frage mich aber, wie sich dies auf ein gemeinsames Arbeitsmuster auswirkt. Beim Lesen einiger Artikel wird der ObjectContext die Arbeitseinheit sein. Wenn ich 2 edmx definiere, werde ich mit 2 ObjectContext: HumanRessourceContext und InventoryContext enden, was bedeutet, dass jeder Wille eine Einheit von Arbeit sein wird. Was, wenn ich möchte, dass alle Änderungen, die an einer Entity in der Human Resource und einer Entity im InventoryContext vorgenommen werden, ATOMIC sind, kann dies mit dem Unit-of-Work-Muster erreicht werden?

+0

Auch meine letzte Frage [Mehrere Schemen im Entity Framework] [1] [1] siehe: http://stackoverflow.com/questions/12052136/how-to-entity-framework-and -multiple-schemes – MorbidCamel

Antwort

7

Zwar ist dies keine Billigung der Spaltung auf die Datenbank von Schema in EDMX ist, können Sie die Updates Atom machen, indem Sie eine TransactionScope:

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

     hr.SaveChanges(); 
    } 

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

     inv.SaveChanges(); 
    } 

    trans.Complete(); 
} 

Natürlich können Sie Ihren Kontext neu anordnen Objekte wie Sie wollen (Wenn Sie beide gleichzeitig verwenden müssen, können Sie die Transaktionsisolationsstufe auf den jeweils geeigneten Wert einstellen, aber dies sollte Ihnen das geben, was Sie wissen müssen, um Ihre Datenbankänderungen unteilbar zu machen.

+0

ok danke, ich habe versucht, transactioncope zu vermeiden. So ziemlich der einzige Weg zu gehen ist, eine einzige edmx zu haben, die alle Elemente der menschlichen Ressource und die Elemente des Inventars enthält, auf diese Weise wird das Unitofwork-Muster gut funktionieren. – pdiddy

+0

@pdiddy: Warum versuchen Sie TransactionScope zu vermeiden? –

+0

Ich hatte gerade den Eindruck mit dem UnitOfWork-Muster, dass ich den transactioncope vermeiden kann, da alles, was auf dem Objekt ausgeführt wird, trotzdem in einer Signaturtransaktion gesendet wird, wenn saveganges aufgerufen wird. So begann ich mich zu fragen, ob ich 2 Kontext habe, wie funktioniert das Unitofwork-Muster, aber ich sehe, dass ich einen Transaktionsbereich verwenden muss, um den 2 Kontext Atom, der Sinn macht. Ich bin neu in diesem Einheitsmuster, also versuche ich es nur zu verstehen. – pdiddy

2

Wenn Ihre Inventory- und HumanResources-Tabellen keine Beziehungen zwischen ihnen haben, ist das Aufteilen der Tabellen in zwei edmx-Dateien in Ordnung, obwohl ich nicht weiß, welchen Nutzen es bietet. Wenn sie direkte oder indirekte Beziehungen haben, werden Sie Probleme bekommen, diese Beziehungen zu verwenden. Die einfachste Lösung ist die Verwendung eines einzelnen EDM.

+1

Es war mehr über Struktur, habe es in meinem Projekt organisiert ... alles in einer einzigen EDMX haben, sagen wir, ich habe wie 50 Tabellen ... in einem einzigen edmx .. seine Art von schwer nur in den Designer öffnen kann sei verwirrend, weil es so viel gibt .... aber wenn es mir Probleme bringt, hätte ich es lieber eine einzige edmx. Vielen Dank – pdiddy

Verwandte Themen