誰かがここで私を助けてくれますか?「ObjectContextインスタンスは破棄されたため、接続を必要とする操作には使用できなくなりました」という例外が発生するのはなぜですか? 次のセクションで?
public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy)
{
if (this.CheckAccess(this.OnCanRead))
{
try
{
Expression<Func<TEntity, bool>> baseFilter = this.GetFilter(this.OnFilter);
IQueryable<TEntity> result = this.Set.AsQueryable();
if (baseFilter != null)
{
result = result.Where(baseFilter);
}
if (filter != null)
{
result = result.Where(filter);
}
if (orderBy == null)
{
return result.ToList();
}
else
{
return orderBy(result).ToList();
}
}
catch (Exception)
{
throw;
}
}
else
{
throw new AccessException("CanRead");
}
}
次のポイントを呼び出す前は、まだ ObjectContext が存在します。
if (baseFilter != null)
{
result = result.Where(baseFilter);
}
if (filter != null)
{
result = result.Where(filter);
}
なぜもう?
- 編集 -
詳細情報:
問題が発生する関数を使用するクラス: DbContextRepository
私のプログラムには、以下から派生した ShopRepository というクラスがあります。
public class ShopRepository : DbContextRepository<Shop>
さらに、私のプログラムには、問題のある関数と呼ばれる DataManager があります。
public static class DataManager
{
public static void Initialize()
{
Initializer.Initializer.SetInitializer();
ObjectFactory.Configure(
x =>
{
x.For<DbContext>().Use<DataContext>();
x.For<IUnitOfWorkFactory>().Use<DbContextUnitOfWorkFactory>();
}
);
DbContextUnitOfWorkFactory.SetDbContext(CreateContext);
}
private static DbContext CreateContext()
{
return new DataContext();
}
private static ShopRepository _shops;
public static ShopRepository Shops
{
get
{
if (DataManager._shops == null)
{
DataManager._shops = ObjectFactory.GetInstance<ShopRepository>();
}
return DataManager._shops;
}
}
- 編集 -
問題は見つかりましたが、修正方法がわかりません。ShopRepository でイベント OnFilter の場合、次のような動的な値が返されます。
x => x.InstallationId == InstallationRepository.CurrentInstallationId
のような固定値がある場合、エラーが発生します。
x => x.InstallationId == 1
が返され、エラーは発生しません。