EF上下文對象創建之線程內唯一


在一次請求中,即一個線程內,若是用到EF數據上下文對象,就創建一個,那么會造成數據混亂,每次創建的對象執行相應的數據庫操作,此同時,其他的EF對象內獲得的數據可能已經是“過期”的了。即這個數據已經變動過。這就是數據混亂,為了解決這個問題,關鍵就是對象的創建問題。

這里首先想到單例模式,不過在這里,不適合用,原因是使用單例模式,會使EF對象得不到及時的資源釋放。

第二種方式即保證在線程內對象唯一,如何保證呢,通過微軟ASP機制的HttpContext對象,這個對象在線程中是唯一的,所以我們在HttpContext中創建或者說添加一個對象,即把我們要創建的EF數據上下文對象添加到HttpContext中。

如何添加呢,可以在工具類(Common.cs)中添加這個個方法去創建

  /// <summary>
    /// 用來創建EF上下文對象,且保證線程內唯一。
    /// </summary>
    public class DbContextFactory
    {
        //DbContext在System.Data.Entity;中,不過這里直接只引用這一個不行,還有EF其他的一些NameSpace所以直接添加一個實體模型,所有引用都進來了,然后再把模型刪了
        public static DbContext CreateDbContext()
        {
            DbContext dbContext = (DbContext)CallContext.GetData("dbContext");
            if (dbContext == null)
            {
                dbContext = new HuaGongWebEntities();//Model中的實體模型的EF上下文實例
                CallContext.SetData("dbContext", dbContext);
            }
            return dbContext;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM