8

たとえば、データベースに複数のデータベーススキーマがあるとします:HumanRessourcesとInventory。

これらの各スキーマには、複数のテーブルが含まれています。通常、DBを複数のedmxに分割しますか、それともすべてを1つのedmxにまとめますか?

スキーマごとにedmxを作成することを考えていましたが、これがユニターワークパターンにどのように影響するのか疑問に思いました。いくつかの記事を読むと、ObjectContextが作業の単位になります。2 edmxを定義すると、最終的に2つのObjectContext:HumanRessourceContextとInventoryContextになります。つまり、それぞれがユニットオブワークになります。ヒューマンリソース内のエンティティとinventorycontext内のエンティティに加えられたすべての変更をATOMICにしたい場合、これはunitofworkパターンで実現できますか?

4

2 に答える 2

7

これは、データベースをスキーマごとに EDMX に分割することを推奨するものではありませんが、次を使用して更新をアトミックにすることができますTransactionScope

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

        hr.SaveChanges();
    }

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

        inv.SaveChanges();
    }

    trans.Complete();
}

明らかに、コンテキスト オブジェクトを好きなように再配置でき (たとえば、両方を同時に使用する必要がある場合)、トランザクション分離レベルを適切なものに変更できますが、これにより、データベースの変更をアトミックにするために。

于 2010-09-15T13:28:05.477 に答える
2

Inventory テーブルと HumanResources テーブルの間に関係がない場合は、テーブルを 2 つの edmx ファイルに分割しても問題ありませんが、どのようなメリットがあるかはわかりません。直接的または間接的な関係がある場合、それらの関係を使用しようとすると問題が発生します。最も簡単な解決策は、単一の EDM を使用することです。

于 2010-09-15T13:32:48.570 に答える