2010-07-15 58 views
2

我剛升級到EF Code First CTP 4,看起來ContextBuilder類已被刪除。目前,我創造我的ObjectContext像這樣(在CTP 3):在EF Code First CTP4中構建一個ObjectContext

var contextBuilder = new ContextBuilder<ObjectContext>(); 
var connstr = ConfigurationManager.ConnectionStrings["MyConn"]; 
var connection = new SqlConnection(connstr.ConnectionString); 
var ctx = contextBuilder.Create(connection); 

我不想創建一個硬編碼的類從ObjectContext中派生像許多自己的例子似乎做。任何人都知道如何在新版本中做到這一點?

回答

5

下面是修改的方式,它應該做的事:

var modelBuilder = new ModelBuilder(); 
var dbModel = modelBuilder.CreateModel(); 
var ctx = dbModel.CreateObjectContext<ObjectContext>(connection); 

注您只需要爲每個應用程序調用一次CreateModel。

+0

太棒了!就是我所需要的!謝謝:) – 2010-09-09 11:11:55

2

來自CTP3的ContextBuilder也會自動發現您在ObjectSet屬性中公開的實體類型,您仍然可以通過調用ModelBuilder.DiscoverEntitiesFromContext方法來執行此操作。

var builder = new ModelBuilder(); 
builder.DiscoverEntitiesFromContext(typeof(MyContext)); 
var model = builder.CreateModel(); 
var context = model.CreateObjectContext<MyContext>(connection); 

顯然這分裂增加了額外的步驟到上下文創建過程,其背後的動機是DbModel之後(或類似於它是一個類型)將成爲模型的主要表示在EF在將來,將是除了ModelBuilder之外的其他模型創建選項的輸出。 DbModel也是應該在整個應用程序中緩存的單元。

+0

關鍵是我不想創建一個自定義的MyContext類。我正在將一個通用ObjectContext注入到存儲庫中,並在存儲庫內部創建我的ObjectSet 。 – 2010-07-15 18:40:55