簡體   English   中英

asp.net mvc3代碼優先(數據庫單例)

[英]asp.net mvc3 Code First (Database Singleton)

我首先使用代碼在asp.net mvc上工作。 我注意到,一旦創建了一個新的控制器,該控制器模板就會顯示僅處理一項工作的dispose覆蓋方法。 處置在此控制器頂部創建的db變量。

我正在考慮將其更改為在我的DBContext類中使用單例模式。

我嘗試了一下,效果很好。 除了我有時需要從global.asax訪問數據庫。 (有時)會引發異常。

有沒有人想過這樣做? 有任何想法嗎?

謝謝

我個人將采用完全不同的方法,請在此處查看我的答案: https ://stackoverflow.com/a/7474357/559144我不會使用Singleton,也不會將MVC硬鏈接到DAL(在您的情況下為EF) )。

關於不使用單例,讓數據庫處理並發; 這是數據庫服務器最好的事情之一;-)

我們使用EF上下文作為每個http上下文的單例。 我也不會將EF與MVC進行硬鏈接,但是您仍然可以通過使用依賴項注入(我們使用Unity)來確保每個http上下文都處理單個EF上下文實例。

我們還訪問全局asax中的上下文,以進行數據庫初始化和種子開發。 同樣,您可以使用DI容器獲取EF上下文的實例。

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
}

public class MyEfContext : DbContext, IUnitOfWork
{
    // your custom context code
}

在IUnitOfWork依賴項注入中使用每個HTTP上下文的生存期並不是在我們的案例中幫助處理並發的方法。 我們這樣做是因為在處理EF實體時,我們需要確保所有選擇/插入/更新/刪除操作始終在同一上下文實例中進行。 EF不允許您將實體附加到多個上下文,因此,每個http上下文使用單例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM