2011-03-17 141 views
58

我即將開始實施一個項目的數據訪問基礎架構,這是一個使用DDD方法構建的項目(這是我第一次嘗試使用DDD,所以溫柔;-))。ADO.NET DbContext生成器與ADO.NET Poco實體生成器(ObjectContext)

我將使用實體框架。到目前爲止,我正在研究Julie Lerman在她的好書Programming Entity Framework中教授的方法,其中ADO.NET POCO實體生成器用於對T4模板和一些更多自定義代碼進行一些更改。
今天,我開始閱讀關於EF4.1和ADO.NET的DbContext發電機文章,使用數據庫首先的做法,而我試圖決定用哪一個,我應該去。

DbContext和EF4.1的DDD方法似乎是比POCO實體更好,更乾淨的方式,但是恐怕在不久的將來可能會導致一些問題,因爲EF4.1仍然在RC中。

ADO.NET team blog,我知道EF4.1 包括:

  • 支持ENUM
  • 空間數據類型的支持
  • 存儲過程支持在代碼的Code First
  • 遷移支持第一個
  • Code First中的可自定義約定

從我的理解,因爲我將使用數據庫優先有一小部分未包括的功能。

總之,我的問題是:
我能代替POCO實體發生器與EF4.1的DbContext發電機?

+0

[very tanangentially] related(Linq to Sql):http://stackoverflow.com/questions/3471455/is-dbcontext-the-same-as-datacontext – 2012-10-10 11:44:41

回答

54

的角度看清潔創建POCO實體時,兩個生成器之間沒有區別。兩個發生器產生相同的實體,但是,ADO.NET POCO實體發生器基於ObjectContext的API,而ADO.NET DbContext發生器基於DbContext的API。 DbContext的API有幾個非常漂亮的新功能(本地,導航屬性上的查詢等),並且API在某種程度上被簡化了,但同時它看起來像在ObjectContext API中使用的一些功能在DbContext API中缺少(或者至少它還沒有得到足夠的探索)。

EF 4.1 RC是上線發佈。這意味着你可以用它構建一個真正的應用程序,因爲API在RTW中不會改變(只有bug會被修復)。此外,RTW應該在下個月發佈,因此我認爲在發佈最終版本之前,您還沒有準備好應用程序。

ObjectContext API or DbContext API?ObjectContext由文檔和博客文章覆蓋的API要好得多。你可以找到很多關於它的例子。其侷限性也是衆所周知的。 DbContext API是新版本。一個非常有前途的版本,主要是因爲代碼優先的方法。博客文章的數量仍然非常有限,沒有任何書,API也沒有足夠的證明。所以這取決於你是否準備好與新的API戰鬥?如果不是,那麼ObjectContext API仍然是一個不錯的選擇,因爲您不需要採用代碼優先的方法。

+0

你是什麼意思的「本地」(在列表中新功能)? – 2011-03-28 20:28:27

+4

@Danny:'DbSet'具有'Local'屬性,它允許您輕鬆查詢已經加載的實體,而無需對數據庫進行新的查詢。 – 2011-03-28 21:19:29

+2

謝謝,我很失望地看到它沒有達到VS2010SP1。 – 2011-03-28 21:23:08