2011-02-18 64 views
1

我做了一個小的測試函數,用於創建直接連接到SQL CE 4.0文件的Entity Framework Code-First DbContext實例,但我真的不喜歡全局狀態方法。沒有更好的方法來做到這一點,而不使用DbDatabase靜態屬性?使用Entity Framework w/o全局狀態

using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Database; 
using System.Data.SqlServerCe; 

public class SqlCeDb 
{ 
    public static T Instance<T>() where T: DbContext, new() 
    { 
     DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 
     DbDatabase.SetInitializer<T>(new DropCreateDatabaseAlways<T>()); 
     return new T(); 
    } 
} 

回答

2

依賴注入是什麼,很多人都在做。你編寫一個依賴於DbContext的類(即它是一個構造函數參數或裝飾爲依賴項的屬性),並且在創建類時,IoC(控制反轉)容器將爲您提供一個實例。我所使用的每個IoC容器都有一種註冊單個實例的方法(而不是每次都創建一個新實例)。

熱門IOC容器:

  • StructureMap
  • 統一
  • Ninject

還有其他的,但這些都是我看到最常用。

+0

明白了。看到我擴展的DbContext有一個接受DbConnection的構造函數,它或多或少地解決了這個問題。 – 2011-02-18 18:28:23