2015-05-09 94 views
0

我已經看到了在構造函數中注入datacontext的EF7人員的例子。應該使用實體框架DbContext通過DI實現IDisposable?

但是,由於DbContext實現了IDisposable,我擔心我的存儲庫也必須實現IDisposable,通過代碼傳播。

我見過的例子沒有實現IDisposable,但我不知道爲什麼。

編輯

爲了澄清 以前我是用分貝範圍內以通常的方式

using(var db = new SomeContext()) 
{ 
    return await from row in db.Table 
     select row).ToListAsync(); 
} 

看做事的注射方式的DbContext將被傳遞到存儲庫構造函數,但是一旦Repository完成,這個存儲庫是否必須實現IDisposable來處置DbContext?

如果Repository隨後會調用另一個更改其注入的DbContext的存儲庫類,那麼這個DBContext是否存在風險?

public SomeOtherRepository (SomeContext db) 
{ 
    this.db = db; 
} 

*

public SomeRepository (SomeOtherRepository repo, SomeContext db) 
{ 
    this.repo = repo; 
    this.db = db; 
} 
public async TaskAdd(Row row) 
{ 
    db.Some.Add(row); 
    await db.SaveChangesAsync(); 
    repo.AddSomethingElse(row.Id); 
} 
+1

我想DI處理對象的生命週期是由DI容器本身處理的。在某些情況下,單件對象根本不配置 –

回答

0

您不需要重寫DbContext.Dispose。

除非您需要取消分配在您的DbContext自定義中創建的資源,否則框架提供的基本實現應該已足夠。

+0

對不起,在最初的問題中沒有明確說明,並且已經擴展了它。我的問題不在我的DbContext上,而是在構造函數 –

+1

中使用它的類取決於你如何配置DI,如前面提到的@luca。重用DbContext實例的危險在於context.SaveChanges()可能會產生意想不到的後果。 – natemcmaster