3

私は Entity Framework と .NET を初めて使用し、MVC 4 アプリケーションの構築に取り組んでいます。データベース コンテキスト インスタンスを作成する場所について、少し混乱していると思います。私のアプリケーションには、Web、ビジネス、データ アクセス、データベース (これらはそれぞれ別のプロジェクトです) という複数のレイヤーがあります。データ アクセス層には、テーブルごとに 1 つのクラスがあります。私が見た例では、データ アクセス レイヤー内の各メソッド内でコンテキストを作成しています (誤解している可能性があります)。ビジネス ロジックの一部として複数のテーブルを更新する場合、これはあまり実用的ではないようです。各データアクセスレイヤーメソッド内に新しいコンテキストを作成した結果、このエラーが発生したようです:An entity object cannot be referenced by multiple instances of IEntityChangeTracker複数のテーブルを更新するとき。

ビジネス層のメソッドでコンテキストを作成し、それをデータ アクセス層のメソッドに渡すことは許容されますか? または、それを行うより良い方法はありますか?

コンテキストがビジネス層から来るこのようなもの:

public User RetrieveUserById(int id, MyDbContext ctx)
    {            
        User findUser = ctx.Users.Find(id);
        return findUser;
    }

データアクセスレイヤーメソッド内でコンテキストを作成する代わりに:

public User RetrieveUserById(int id)
    {
        var ctx = new MyDbContext();
        User findUser = ctx.Users.Find(id);
        return findUser;
    }

助けてくれてありがとう!

4

1 に答える 1

5

データ アクセス層。DbContext と共にデータ層に存在する「作業単位」クラスを作成します。「Asp.net 作業単位パターン」で検索してみてください。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-application1

基本的に、複数のリポジトリ/テーブルをまとめるための中心的な場所であるため、コンテキストを破棄せずに複数のリポジトリを操作できます。示されているとおりに使用する必要はありません。ニーズに合わせて変更できます。

于 2013-03-27T23:04:57.333 に答える