私は 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;
}
助けてくれてありがとう!