2011-03-17 139 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