0
  • 我正在使用asp.net mvc 3,具有IoC結構映射的實體框架。
  • 我有我自己的自定義會員供應商。
  • 當我使用StructureMap注入dbcontext對象和成員資格實例時,我遇到了同樣的問題,因此我的UserRepository已將其刪除。
  • UserRepository現在具有在構造函數中初始化的DBContext屬性。

每次創建/更新新用戶(執行此操作的方法都將dbcontext對象封裝在using語句中)時,下次引用dbcontext時,會拋出ObjectDisposedException。ObjectDisposedException每次拋出「用戶」(成員資格)對象時拋出

我不明白我在做什麼錯。顯然,成員資格提供程序類在每次需要時都不會實例化userRepository對象,並且在更新用戶時由於using語句而放棄上下文。但我認爲這是標準做法?

任何幫助,非常感謝。

編輯:

真的沒有複雜的代碼。設置是:

CustomMembershipProvider覆蓋標準的成員資格提供者(配置文件已獲得詳細信息)。 CustomMembershipProvider使用IUserService對象,該對象使用由UserRepository實現的IUserRepository,該類在類級別具有DBContext專用對象。

在UserRepository,我有:

public void UpdateUser(User user) 
    { 
     using(_db) 
     { 
      ... code to indicate that the user state has changed 
      _db.SaveChanges(); 
     } 
    } 

一旦運行這些代碼,請求完成。但是當另一個請求檢索角色信息或從數據庫讀取用戶時(在UserRepository類中),我得到拋出的ObjectDisposedException。此時沒有任何與用戶或角色相關的作品,因爲它們使用的是相同的UserRepository類,其_db變量已由UpdateUser處置。

我最初有StructureMap解決DBContext對象,customMembership對象等,但必須從StructureMap的映射中刪除它。

+0

可以顯示用於連接依賴項的代碼和引發異常的代碼嗎? – Bassetassen

回答

3

每當一個新的用戶創建/更新(方法做這 使用語句包裹的DbContext對象 ) ,該 的DbContext引用的下一次我 的ObjectDisposedException異常。

DbContext是一次性資源(實現IDisposable)。因此,當您將其封裝在using區塊中時,當控制流程從using區塊移出時,上下文爲disposed

using(myContext) 
{ 
    //do stuff 
} 

//try to access myContext after the using block throw ObjectDisposedException 

你有你如何使用DbContext,當你要處理它重新設計。

+0

我意識到DBContext被放置在Using語句中。但這是標準做法,不是嗎?我現在通過在每個成員類的方法中實例化一個「UserRepository」對象來解決這個問題。我認爲Membership&Role提供者不會實例化它需要用來連接數據庫進行認證的底層對象。至少這是我所看到的。使用結構映射解析對象不起作用,因爲在用戶對象上存在更新操作時將丟棄dbcontext。這可能是我做錯了,但我不確定 – amythn04

+0

@ user688360更好,如果你可以發佈一些代碼 – Eranga

+0

我會後來從Global.aspx.cs發佈StructureMap映射,但我已經編輯了我的原始問題有關設置和代碼的更多信息。 – amythn04

相關問題