0

今のところ私はこの文脈を持っています

namespace Dafoor_MVC.Models
{
  public class DafoorDBContext : DbContext
  {
    public DbSet<Department> departments { get; set; }
    public DbSet<Course> courses { get; set; }
    public DbSet<Reply> replies { get; set; }
  }
}

追加したいモデルが約40あるため、このコンテキストは大きくなります。

1- 1つのコンテキストに40のモデルを含めるのは良い考えですか?

2-レコードがすでにコンテキストにある場合は毎回クエリでデータベースにアクセスしたくないので、このコンテキストをすべてのユーザー間で共有したいのですが、これはサーバーメモリに影響するので、どうすれば実装できますか「以前に破棄されたオブジェクト、またはコンテキストから破棄されるために一定時間呼び出されなかったオブジェクト」のように?コンテキスト全体を破棄したくありません。

3-ポイント2が機能しなかった場合、コンテキストのインスタンスをユーザーセッションに配置して、コンテキストがアプリケーション固有ではなくユーザー固有になるようにすることはできますか?

4

2 に答える 2

1

1つのコンテキストに40のモデルを含めるのは良い考えですか?

それらがすべて論理的に一緒に属していれば、それは何も悪いことではありません。

このコンテキストをすべてのユーザー間で共有したい

いいえ、しません。個々のHTTPリクエストのコンテキストをインスタンス化し、HTTPリクエストの処理が完了する前にそれを破棄する必要があります。DbContextをキャッシュしないでください。

コンテキストのインスタンスをユーザーセッションに配置して、コンテキストがアプリケーション固有ではなくユーザー固有になるようにすることはできますか?

コンテキストをキャッシュしないでください。ただし、Sessionのコンテキストを使用して取得したオブジェクトを保存できます。最初にオブジェクトを新しいコンテキストに再アタッチしない限り、オブジェクト/オブジェクトグラフを更新することはできません。

アップデート

DbContextを現在のHTTPリクエストを超えて保存してはならない理由は次のとおりです。

Webリクエストごとに1つのDbContext...なぜですか?

于 2013-03-26T18:18:27.390 に答える
0

1)単一のコンテキストクラスに40以上のDbSetがあることを心配する理由はありません。これらは単なるコレクションであり、現在使用しているオブジェクトのみが入力されます

2)DbContextおよびDbSetのインスタンスメンバーは、スレッドセーフであることが保証されていません。シングルトンアプローチはお勧めしません

3)可能ですが、データベースの同時実行性の例外を適切に処理するようにしてください

于 2013-03-26T18:24:14.150 に答える