0

プロジェクトでエンティティ フレームワークと汎用リポジトリを使用しています。

以下は、私のリポジトリの方法の1つです。

public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
        {
            var entityName = GetEntityName<TEntity>();
            return ((IObjectContextAdapter)DbContext).ObjectContext.CreateQuery<TEntity>(entityName);
        }

WCF サービスでこのメソッドを使用するときに、その DbSet の特定のナビゲーション プロパティを含めたいと考えています。例えば、

List<Countries> GetCountries()
{   
    return this.repository.GetQuery<Countries>().Include("Cities").AsEnumerable().ToList();
}

これにより、ナビゲーション プロパティに都市が設定されているすべての国が返されます。

現在、これにより、基になる接続が閉じられたというエラーが発生します...

これを達成するために、どのような変更を加えると思いますか?

ありがとう

4

2 に答える 2

0

DbContext を直接使用するように GetQuery メソッドを書き直すことから始めます。ObjectContext の GetQuery メソッドは、SQL のような構文を使用してデータ ストアをクエリすることを目的としています。

ここでは、必要のないことがたくさん起こっています。DbContext 派生クラスから始めているので、単純に dbContext.Set() を使用してエンティティ タイプの DbSet を取得し、DbSet オブジェクトで Include( path ) メソッドを使用します。

リポジトリ方式:

public IQueryable<TEntity> GetQuery<TEntity>( string includePath = null )
{
    var dbSet = DbContext.Set<TEntity>();

    if( !string.IsNullOrWhitespace( includePath ) )
    {
        return dbSet.Include( includePath );
    }

    return dbSet;
}

利用方法:

List<Countries> GetCountries()
{   
    return this.repository.GetQuery<Countries>( "Cities" ).ToList();
}
于 2013-03-25T23:23:29.320 に答える
0

EF 5.0 コード ジェネレーター テンプレートにアップグレードすると、問題が修正されました。

于 2013-03-29T13:05:43.583 に答える