2017-01-31 2 views
-1

これに似た他の質問がありましたが、これを把握するのに十分近いものはありません。ここで私のリポジトリにエラーが表示されます:ObjectContextインスタンスが破棄されました。asyncメソッド、ToListAsync()、SqlQuery

return await Context.Database.SqlQuery<MemberField>(sqlstring).ToListAsync(); 

どうすればこの問題を解決できますか?以前はコードに変更を加えることなく動作していたので、私がしなければならないのはコンテキストを生かしておくことだけだということが分かっています。私はこれをやってみた:

Context.Configuration.LazyLoadingEnabled = false; 

しかし、それは助けになりませんでした。これは、ASP.NET定型プロジェクトの内部にあります。

ありがとうございます!私は、コンストラクタで

public MyRepository(IDbContextProvider<MyDbContext>  dbContextProvider) : base(dbContextProvider) 

それから私はAbpDbContextクラスを持っている:

public class MyDbContext : AbpDbContext{ 
public MyDbContext() : base("Default"){} 

public MyDbContext(string nameOrConnectionString) : base(nameOrConnectionString){} 

}

あなたはちょうど私がしようとしているプロジェクトなどのテンプレート溶液をつかむことができますここから作業する:http://www.aspnetboilerplate.com/

更新:ABPハンドルcrデータベース接続を食べて処分するので、私はそのことを示すコードはありません。

+4

コンテキストを作成/廃棄していますか?それを見せてください。 公共MyRepository(IDbContextProvider dbContextProvider):私は、コンストラクタに – DavidG

+0

塩基(dbContextProvider) そしてIはAbpDbContextクラスがある: パブリッククラスMyDbContext:AbpDbContext { パブリックMyDbContext():ベース( "デフォルト") {} public MyDbContext(string nameOrConnectionString):base(nameOrConnectionString){} } – paladyr

+1

最新の編集はDavidGが求めているものではありません。コンストラクタを表示していますが、コンテキストのライフサイクルについては何も表示していません。 – Igor

答えて

0

リポジトリ内のusingステートメントでdbcontextを処理することができました。これにより、Abpフレームワークがdbcontextを処理して処理を開始するのが早すぎます。したがって、現在の状況は次のようになります。

public List<MyObjs> GetObjs(){ 
    using(var db = new MyDbContext()){ 
     var query = from x in db.mytable 
        select x; 
     return query.ToList(); 
    } 
} 
関連する問題