1

汎用リポジトリにメソッドがあります:

public IQueryable<T> Query<T>() where T : class, IEntity
{
   return _context.Set<T>();
}

これは、ユーザーを取得するためのメソッドです:

public User GetUser(string email)
{
   return _repository.Query<User>().FirstOrDefault(u => u.Email == email);
}

最後に、ユーザーをセッションに配置します。

AppSession.CurrentUser = UserService.GetUser(email);

私のアクションでは、現在のユーザーを取得し、オブジェクトのコレクションを取得する必要がありますNotifications(1 対多):

AppSession.CurrentUser.Notifications.OfType<EmailNotification>().FirstOrDefault();

しかし、ここでエラーが発生します:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

DBからNotifications取得したときにロードされていないことを知っています。オブジェクト をロードするための EF の言い方 については知っていますが、メソッドでは使用できません。User
NotificationsIncludeGetUser

4

2 に答える 2

2

CurrentUserオブジェクトのルックアップ後に最初の HttpRequest が終了すると、 EmailNotifications などの追加のルックアップを期待している_repository参照が利用できなくなります。CurrentUser

CurrentUser元のオブジェクト コンテキストがないため、例外がスローされるため_repository、使用している新しい objectContext に CurrentUser オブジェクトをアタッチするか、作成された新しいコンテキストを介してユーザーをリロードする簡単なソリューションを使用する必要があります。リポジトリ内の現在のリクエスト。

アクションで通知を見つけようとする前に、次の行を追加します。

AppSession.CurrentUser = UserService.GetUser(AppSession.CurrentUser.Email);
AppSession.CurrentUser.Notifications.OfType<EmailNotification>().FirstOrDefault();
于 2013-03-14T08:08:27.497 に答える