次のコード行で、「基になる接続が閉じられました」というエラーが表示されます。
return this.repository.GetQuery<Countries>().Include(g => g.Cities).AsEnumerable().ToList();
しかし、私が削除すれば.Include(g => g.cities)
それはうまくいきます。
このコードは、WCFサービスの操作の1つで記述されており、WCFテストクライアントを使用してテストしようとしています。この操作をMVCアプリケーションからも呼び出してみましたが、そこでも同じ問題が発生していました。また、エンティティフレームワークでジェネリックリポジトリを使用しています
リポジトリコード(いくつかの重要な抜粋のみ)
コンストラクタ:
public GenericRepository(DbContext objectContext)
{
if (objectContext == null)
throw new ArgumentNullException("objectContext");
this._dbContext = objectContext;
this._dbContext.Configuration.LazyLoadingEnabled = false;
this._dbContext.Configuration.ProxyCreationEnabled = false;
}
GetQueryメソッド:
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
var entityName = GetEntityName<TEntity>();
return ((IObjectContextAdapter)DbContext).ObjectContext.CreateQuery<TEntity>(entityName);
}
試行#1 リポジトリコードに次のオーバーロードを作成しました。
public IQueryable<TEntity> GetQuery<TEntity>(params string[] includes) where TEntity : class
{
var entityName = GetEntityName<TEntity>();
IQueryable<TEntity> query = ((IObjectContextAdapter)DbContext).ObjectContext.CreateQuery<TEntity>(entityName);
foreach(string include in includes)
{
query = query.Include(include);
}
return query;
}
public IQueryable<TEntity> GetQuery<TEntity>(Expression<Func<TEntity, bool>> predicate, params string[] includes) where TEntity : class
{
return GetQuery<TEntity>(includes).Where(predicate);
}
WCFは現在、次のコード行を実行しようとしています。
return this.repository.GetQuery<Countries>("Cities").AsEnumerable().ToList()
ただし、「基になる接続が閉じられました」という同じエラーが発生します。WCFテストクライアントでテストしました。ただし、リポジトリコードをデバッグすると、ナビゲーションオブジェクトが結果に含まれていることが示されますが、出力をクライアント(WCFテストクライアントまたはその他のクライアント)に渡そうとしているときに問題が発生しているようです。