2010-09-15 12 views
8

Załóżmy, że mam w mojej bazie danych wiele schematów db, na przykład: HumanRessources i Inventory.Entity Framework z wieloma edmx

W każdym z tych schematów znajduje się wiele tabel. Czy zazwyczaj dzielisz DB na wiele edmxów lub zazwyczaj umieszczasz wszystko w jednym edmxie?

Zastanawiam się nad stworzeniem edmx dla każdego schematu, ale zastanawiam się, jak wpłynie to na wzór nieobiektywu. Czytając niektóre artykuły, ObjectContext będzie jednostką. Definiując 2 edmx, otrzymam 2 ObjectContext: HumanRessourceContext i InventoryContext, co oznacza, że ​​każdy będzie jednostką. Co się stanie, jeśli chcę, aby wszystkie modyfikacje dokonane w jednostce w źródle danych i jednostce w stanie inwentarzowym były ATOMOWE, czy można to osiągnąć za pomocą wzoru jednostkowego?

+0

zobaczyć także moje ostatnie pytanie [wielu schematów w Entity Framework] [1] [1]: http://stackoverflow.com/questions/12052136/how-to-entity-framework-and -multiple-schemas – MorbidCamel

Odpowiedz

7

Choć nie jest to poparcie dzielenie się z bazą danych, schematu do EDMX, można dokonać aktualizacji atomowy za pomocą TransactionScope:

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

     hr.SaveChanges(); 
    } 

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

     inv.SaveChanges(); 
    } 

    trans.Complete(); 
} 

Oczywiście można zmienić context obiektów jak chcesz (jeśli chcesz używać ich jednocześnie w tym samym czasie) i możesz zmienić poziom izolacji transakcji na cokolwiek, co jest odpowiednie, ale powinno to dać ci to, co musisz wiedzieć, aby zmienić bazę danych na atomową.

+0

ok dzięki, starałem się uniknąć transactioncope. Tak więc jedyną drogą do zrobienia jest posiadanie jednego edmx, który zawiera wszystkie elementy zasobów ludzkich i elementy inwentarza, w ten sposób wzorzec unitofwork będzie działał dobrze. – pdiddy

+0

@pdiddy: Dlaczego próbujesz uniknąć TransactionScope? –

+0

Byłem pod wrażeniem ze wzorem UnitOfWork, że mogę uniknąć transakcji, ponieważ wszystko wykonane na obiekcie zostanie wysłane w jednej transakcji signe podczas wywoływania zmian. Tak więc zacząłem się zastanawiać, czy mam 2 kontekst, jak działa wzór unitofwork, ale widzę, że będę musiał użyć motioncope, aby utworzyć 2 kontekstowy atom, co ma sens. Jestem nowy w tej jednostkowej strukturze, więc próbuję to zrozumieć. – pdiddy

2

Jeśli Twoje tabele inwentaryzacji i HumanResources nie mają między sobą żadnych relacji, podzielenie tabel na dwa pliki edmx jest w porządku, chociaż nie wiem, jakie korzyści przyniosłoby. Jeśli mają bezpośrednie lub pośrednie relacje, napotkasz problemy próbując wykorzystać te relacje. Najprostszym rozwiązaniem jest użycie jednego EDM.

+1

Chodziło bardziej o strukturę, czy było to zorganizowane w moim projekcie ... mając wszystko w jednym edmxie, powiedzmy, że mam 50 tabel ... w jednym edmxie ... jego rodzaj ciężkiego po prostu otwarcie w projektancie może być mylące, ponieważ jest tak wiele .... ale jeśli to przyniesie mi problemy, wolę raczej mieć jeden edmx wtedy. Dzięki – pdiddy

Powiązane problemy